2015-01-21 36 views
0

我试图查询用户加入的组列表。组架构有关于该组的信息。在用户模式中是用户加入的组以及他们加入的日期。查询Mongoose中的ObjectIds数组

var UserSchema = new Schema({ 
    email: String, 
    groups : [{ 
     groupId : Schema.ObjectId, 
     joined: {type: Date, default: Date.now} 
    }], 
    events : [Schema.ObjectId] 
}); 

var GroupSchema = new Schema({ 
    title: String, 
    admin: [Schema.ObjectId], 
    about: String 
}) 

//Assume that userId is valid (is a valid ObjectId) 
User.findOne({_id : userId},function(err, user) { 
    if (err){ 
     res.send(err); 
    } 

    // Grab events from group array and return result 
    Group.find({_id : {$in : user['groups']._id}}, function(err, groups){ 

     res.json(groups); 
    }); 

}); 

,但我得到了一个未定义的结果

这是用户文档

{ _id: 54bf1ac6b4ff988e0b000003, 
    email: '[email protected]',  
    __v: 0, 
    groups: 
     [ { _id: 54bf1dc44fa35ec50f000006, 
      joined: Tue Jan 20 2015 22:32:20 GMT-0500 (EST) }, 
      { _id: 54bf225a480f01b314000006, 
      joined: Tue Jan 20 2015 22:51:54 GMT-0500 (EST) } 
    ], 
} 

所以基本上我想要得到这样

[ { _id: 54bf1dc44fa35ec50f000006, 
    joined: Tue Jan 20 2015 22:32:20 GMT-0500 (EST), 
    title: 'Poop', 
    admin: none, 
    about: 'stinky' 
    }, 
    { _id: 54bf225a480f01b314000006, 
    joined: Tue Jan 20 2015 22:51:54 GMT-0500 (EST) 
    title: 'Poop2', 
    admin: none, 
    about: 'stinky2' 
    } 
], 
列表的输出示例

回答

0

在这种情况下,user['groups']是一个组数组,因此它没有_id字段。

// Grab events from group array and return result 
Group.find({_id : {$in : user['groups']._id}}, function(err, groups){ 

    res.json(groups); 
}); 

尝试这样:

Group.find({_id : {$in : user['groups'].map(function(group) { return group._id; })}}, function(err, groups){ 

    res.json(groups); 
});