我有以下架构:
var userSchema = new Schema({
username: String,
rooms: [{type: Schema.Types.ObjectId, ref: 'Room'}]
});
var roomSchema = new Schema({
members: [
{
user:{type:Schema.Types.ObjectId, ref 'User'},
role: String
}
],
messages: [
{
text: String,
meta: {
send: {type: Schema.Types.ObjectId, ref 'User'},
sent_time: Date
}
}
]
});
我希望获得特定用户的所有房间并深入填充每个房间以获取填充的消息和成员数组,以便消息中的每个发件人都填充用户名,并且每个成员都填充了他/她的用户名,如下所示:
User.findById(id).
populate({
path: 'rooms',
populate: [
{
path: 'members.user',
select: 'username'
},
{
path: 'messages.meta.sender',
select: 'username'
}
]
}).exec(function(err, self) { // self becomes deep populated});
显然,上述内容对我不起作用。