0

我对猫鼬和节点 js 很陌生。我在我的项目中遇到了一些麻烦。这是我的用户模型

UserSchema = new Schema({
account:String,
password:String,
display_name:String )}

和朋友模型

FriendSchema = new Schema({

friend_from_id:{
    type:Schema.ObjectId,
    ref:'users'
},
friend_to_id:{
    type:Schema.ObjectId,
    ref:'users'
}});

和 user_status 模型

UserStatusSchema = new Schema({

user_id:{
    type:Schema.ObjectId,
    ref:'users'
},
status:{
    type:Boolean
},
status_text:String,
last_updated_at:String});

我如何填充或以任何方式从这样的朋友模型中获得结果

{
"_id": "55145b6b8b9c9e6c1f739441",
"friend_to_id": {
    "_id": "5502976dbef9fa180d28ea21",
    "display_name": "Jason",
    "account": "xxx@ginmed.com",
    "status":false,
    "status::"how it's going"
},
"friend_from_id": {
    "_id": "5502976dbef9fa180d28ea21",
    "display_name": "SonPham",
    "account": "yyy@ginmed.com",
    "status":true,
    "status::"how to do it"}

这意味着我想在朋友模型领域结合 user_status 和用户模型

4

2 回答 2

0

我不太确定我是否理解这个问题,但您似乎有一个用户列表,您希望为其建立一个自我引用的多对多关系(即用户可以有朋友并成为朋友)许多其他用户)。要启用此功能,您需要更新用户对象(可能带有其他信息)和朋友集合(带有添加/删除的关系)。在不对解决方案发表评论的情况下,我认为您会通过查看 mongoose 的“钩子”中间件 ( http://mongoosejs.com/docs/middleware.html ) 找到所需的内容。这允许您在保存前和保存后阶段执行附加功能。一旦你保存了你的用户模型,你可以使用 post save 钩子来更新朋友模型。

UserSchema.post('save', function(doc) {
    // Remove deleted friendships and add new ones here
});

至于您提出的解决方案,我将研究与 nosql(mongodb 和 mongoose)的多对多关系,以寻找一些可能的替代方案/改进。

于 2015-04-06T12:31:33.910 回答
0

您可以使用以下查询来填充这两个集合

FriendSchema.findOne({}).
populate(friend_from_id).
populate(friend_to_id).
exec(function (err, schema) {});
于 2019-06-28T06:08:39.873 回答