栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Modelling f中为朋友模式建模?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Modelling f中为朋友模式建模?

所以最后我做到了,我认为这可能是用
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 ]    }  }}])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号