当前位置: 首页 > 面试题库 >

Modelling f中为朋友模式建模?

子车睿
2023-03-14
问题内容


其他用户个人资料上时,如何为猫鼬模式建模以获取这三个按钮?

  1. Add Friend
  2. Requested
  3. Friends

我的用户架构

My users schema

const schema = new Mongoose.Schema({
  firstName: { type: String, default: '', trim: true },
  lastName: { type: String, default: '', trim: true },
}, { timestamps: true })

我无法为此找到正确的建模…并且还建议
在建模之后建议汇总…


问题答案:

所以最后我做到了,我认为这可能是用
mongodb和mongoose 做到的最佳方法

1.为用户创建一个模型。

    var Schema = mongoose.Schema
    const usersSchema = new Schema({
      firstName: { type: String, required: true },
      lastName: { type: String, required: true },
      friends: [{ type: Schema.Types.ObjectId, ref: 'Friends'}]
    }, {timestamps: true})
    module.exports = mongoose.model('Users', usersSchema)

2.为有枚举被接受,拒绝,未决和请求的朋友创建模型。

    const friendsSchema = new Schema({
      requester: { type: Schema.Types.ObjectId, ref: 'Users'},
      recipient: { type: Schema.Types.ObjectId, ref: 'Users'},
      status: {
        type: Number,
        enums: [
            0,    //'add friend',
            1,    //'requested',
            2,    //'pending',
            3,    //'friends'
        ]
      }
    }, {timestamps: true})
    module.exports = mongoose.model('Friends', friendsSchema)

3.现在api调用–>假设我们有两个用户UserA和UserB…因此,
当UserA当时要求UserB成为朋友时,我们制作了两个
文档,以便UserA可以看到请求的内容,而UserB可以看到待处理的内容,
同时我们在用户的朋友中推送这些文档的_id

    const docA = await Friend.findOneAndUpdate(
        { requester: UserA, recipient: UserB },
        { $set: { status: 1 }},
        { upsert: true, new: true }
    )
    const docB = await Friend.findOneAndUpdate(
        { recipient: UserA, requester: UserB },
        { $set: { status: 2 }},
        { upsert: true, new: true }
    )
    const updateUserA = await User.findOneAndUpdate(
        { _id: UserA },
        { $push: { friends: docA._id }}
    )
    const updateUserB = await User.findOneAndUpdate(
        { _id: UserB },
        { $push: { friends: docB._id }}
    )

4.如果用户B接受请求

    Friend.findOneAndUpdate(
        { requester: UserA, recipient: UserB },
        { $set: { status: 3 }}
    )
    Friend.findOneAndUpdate(
        { recipient: UserA requester: UserB },
        { $set: { status: 3 }}
    )

5.如果用户B拒绝请求

    const docA = await Friend.findOneAndRemove(
        { requester: UserA, recipient: UserB }
    )
    const docB = await Friend.findOneAndRemove(
        { recipient: UserA, requester: UserB }
    )
    const updateUserA = await User.findOneAndUpdate(
        { _id: UserA },
        { $pull: { friends: docA._id }}
    )
    const updateUserB = await User.findOneAndUpdate(
        { _id: UserB },
        { $pull: { friends: docB._id }}
    )

6.获取所有的朋友,并检查是否登录用户的朋友该用户或不

User.aggregate([
  { "$lookup": {
    "from": Friend.collection.name,
    "let": { "friends": "$friends" },
    "pipeline": [
      { "$match": {
        "recipient": mongoose.Types.ObjectId("5afaab572c4ec049aeb0bcba"),
        "$expr": { "$in": [ "$_id", "$$friends" ] }
      }},
      { "$project": { "status": 1 } }
    ],
    "as": "friends"
  }},
  { "$addFields": {
    "friendsStatus": {
      "$ifNull": [ { "$min": "$friends.status" }, 0 ]
    }
  }}
])


 类似资料:
  • 为了了解在朋友关系中使用Neo4J的优势,我在MySQL数据库上创建了一个Persons表(“Persons”,20900个数据集): 和一张关系表(“友谊”,每个人有50到100个朋友): 因此,大约有120万人的关系。 现在我想查看id=1的人的朋友的朋友的朋友的朋友,因此我创建了一个如下查询: 用户ID 1的查询用了大约30秒 在Neo4J中,我为每个人创建了一个节点(20900个节点)和一

  • 问题内容: 我有一个类似于myspace / facebook的社交网络。在我的代码中,您不是一个人的朋友,还是不是一个朋友,因此,我显示了您与之成为朋友的人的所有操作(在此帖子中,我将这些操作单独称为公告帖子,以使其更易于可视化。 因此,您每当有人发布公告时,都会向在那里的任何朋友显示。 在mysql中,您可以通过执行以下操作来获得个人朋友列表, 我想知道像facebook之类的网站如何显示您的

  • 发送加为朋友请求给想成为朋友的对象。若对方同意即可成为朋友,并显示于朋友列表中。 若要使用此功能,需使用PS Vita注册PlayStation®Network。 A ) 个人信息 B ) 目前的加为朋友请求数量 C ) 朋友信息 D ) 正在确认加为朋友请求 若成为朋友,即可在以下应用程序交换信息及畅享交流乐趣。 (派对)*1 (near)*1 (群信息) (奖杯) 游戏*2 *1 仅限朋友使用

  • 我的C++代码示例中有一个很大的问题。“朋友”和“模板”有问题。 错误消息: Matrix.h:26:79:警告: 友元声明'std::oStream&MatrixClass::Operator<<(std::oStream&,const MatrixClass::Matrix&)'声明一个非模板函数[-wnon-template-friend]友元声明'std::oStream&Operator

  • 可通过PlayStation®Network与远方的用户成为朋友,或查看朋友状态的应用程序。能在(派对)或(群信息)等应用程序中,与朋友尽情交流。在个人信息画面或游戏的交流区中亦可查看朋友的活动或撰写留言。 朋友的LiveArea™ 成为朋友 查看个人信息

  • 我试图使乘法运算符成为名为TVector3的模板类的朋友。我读过,我可以在类声明中声明朋友函数之前,对其进行前向声明,但我这样做的尝试是徒劳的。我知道我可以简单地定义friend函数而不是声明它,但我希望它能与前向声明技术一起工作。 特别是,我试图为我的案例实施这个解决方案。我发现这篇文章也是David Rodriguez给出的解决方案(第三个版本),但我不知道我做错了什么。 我使用'g temp