mongodb中的原生反向链接

时间:2014-11-09 14:42:08

标签: mongodb

例如,我创建了两条评论的帖子:

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,但没有理解如何解决我的任务。

1 个答案:

答案 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 }
        }
    },
]);