如何在mongoose和node js中的同一记录上填充两个集合

时间:2015-04-06 08:18:24

标签: node.js mongodb validation mongoose mongoose-populate

我是mongoose和node 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和用户模型

2 个答案:

答案 0 :(得分:0)

我不太确定我理解这个问题,但是看起来你有一个用户列表,你想要自我引用,多对多的关系(即用户可以有朋友的并成为许多其他用户的朋友)。要启用此功能,您需要更新用户对象(可能包含其他信息)和friends集合(添加/删除关系)。在没有评论解决方案的情况下,我认为你会通过查看"钩子"来找到你需要的东西。中间件(http://mongoosejs.com/docs/middleware.html)用于猫鼬。这允许您在保存前和保存后阶段执行其他功能。保存用户模型后,可以使用post save挂钩更新好友模型。

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

关于您提出的解决方案,我会考虑many to many relationship with nosql (mongodb and mongoose)寻找一些可能的替代/改进措施。

答案 1 :(得分:0)

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

FriendSchema.findOne({}).
populate(friend_from_id).
populate(friend_to_id).
exec(function (err, schema) {});