我正在尝试查询用户加入的群组列表。组架构包含有关该组的信息。在用户模式中,用户加入的组以及他们加入的日期。
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: 'poop@gmail.com',
__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 :(得分: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);
});