例如,我创建了两条评论的帖子:
db.posts.save(id: 'xxx');
db.comments.save(id:'c1', post: 'xxx', text: 'first comment');
db.comments.save(id:'c2', post: 'xxx', text: 'second comment');
我想在posts.find()中获取有关评论的数据:
[{id: 'xxx', commentsCount: 2}]
或更好:
[{id: 'xxx', comments:['c1', 'c2']}]
我想用本机mongodb方法(没有手动更新集合'posts')。阅读有关DbRefs和MapReduce,但没有理解如何解决我的任务。
答案 0 :(得分:0)
如果您想以转换的方式检索文档,那么您正在寻找aggregation framework。
首先,您使用$match运算符将聚合范围缩小到相关文档。在这种情况下,您希望基于许多文档创建一个文档,因此您需要$group运算符。
这将为您提供一个包含特定帖子数组的文档:
db.comments.aggregate([
{ $match: {
post:'xxx'
}
},
{ $group: {
id: "$post",
comments: { $push: "$text" }
}
},
]);
这会给你一个带有计数的文件:
db.comments.aggregate([
{ $match: {
post:'xxx'
}
},
{ $group: {
id: "$post",
commentsCount: { $sum: 1 }
}
},
]);