我在MongoDB中有这个设置
项目:
title: String
comments: [] // of objectId's
评论:
user: ObjectId()
item: ObjectId()
comment: String
这是我的Mongoose架构:
itemSchema = mongoose.Schema({
title: String,
comments: [{ type: Schema.Types.ObjectId, ref: 'comments' }],
});
Item = mongoose.model('items', itemSchema);
commentSchema = mongoose.Schema({
comment: String,
user: { type: Schema.Types.ObjectId, ref: 'users' },
});
Comment = mongoose.model('comments', commentSchema);
这是我得到我的项目和评论的地方:
Item.find({}).populate('comments').exec(function(err, data){
if (err) return handleError(err);
res.json(data);
});
如何使用相应的用户填充注释数组?由于每条评论都有一个用户ObjectId()?
5 回答
作为调用结果对象填充的完整示例:
从模型调用的形式对.populate()的调用采用文档或数组作为它的第一个参数 . 因此,您遍历每个项目的返回结果,并在每个"comments"数组上调用此方式填充 . "path"告诉函数它匹配的是什么 .
这是使用forEach的“async”版本完成的,因此它是非阻塞的,但通常在所有操作之后,响应中的所有项目不仅填充了注释,而且注释本身具有相关的“用户”详细信息 .
还有一种方法(更容易):
更简单
要添加一个人们可能想要用来从子文档中仅选择特定字段的最终方法,您可以使用以下“select”语法:
填充子子文档并从多个模式填充
或者您可以通过以下方式完成..
当我必须获得同一父节点的多个子子文档时,我发现第二种方法(使用数组)更有用 .