mongodb:组VS map-reduce VS聚合

时间:2014-03-18 18:56:55

标签: mongodb mapreduce aggregation-framework

我试图合并两个系列,但我不知道该怎么做。

我应该使用Group,MapReduce,Aggregation还是什么?

CONTENTS

content_id
----------
1
2
3

REACTIONS

content_id     user
----------     ----
1              john
2              john
1              steve
2              steve
2              paul

如何获取所有内容的列表以及为每个内容做出反应的用户数量?像这样的东西:

content_id       reactions
----------       ---------
1                2
2                3
3                0

2 个答案:

答案 0 :(得分:1)

鉴于上述数据,最简单的形式是使用聚合。你不需要"合并"您只需使用一个集合即可获得所需的输出集合:

db.reactions.aggregate([
    { "$group": {
        "_id": "$content_id",
        "reactions": { "$sum": 1 }
    }}
])

当然,这比尝试在代码中循环结果要快得多。

答案 1 :(得分:0)

就像@Joachim和@Neil指出的那样,你的问题仍然是抽象的,你的数据似乎没有正确建模。如果你有正当理由以这种方式建模,那就没关系了。

但如果这是一项特殊任务,你可以尝试以下方法:

> db.contents.find().forEach(function(doc) { 
... var count = db.reactions.find({content_id:doc._id}).count(); 
... print(doc._id + " - " + count) 
... })
1 - 2
2 - 3
3 - 0