我试图合并两个系列,但我不知道该怎么做。
我应该使用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
答案 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