发布mongo聚合,我可以将文档与匹配键上的其他文档合并吗?

时间:2014-04-24 13:58:11

标签: mongodb mongodb-query aggregation-framework

假设我运行Mongo聚合查询并获取结果集,其中包含表单中的文档,

{ user_id : 1234, value : 678 } 

是否可以从聚合查询中获取返回的文档,并将user_id与用户集合中的文档进行匹配,然后合并结果。即将上述文档与表格

的用户记录相匹配
{_id : 1234, name : bob knight, email : bob@bob }

并返回

{_id : 1234, name : bob knight, email : bob@bob, value : 678 }

1 个答案:

答案 0 :(得分:0)

假设每个用户有一个值doc,或者如果有多个,则要添加它们,您可以这样做:

db.collection.aggregate(
     {$project:{user_id:{$ifNull:["$user_id","$_id"]}, email:1,name:1,value:1}},
     {$group:{_id:"$user_id",name:{$max:"$name"}, email:{$max:"$email"},value:{$sum:"$value"}}}
)

$ project需要使用_id将user_id字段添加到文档中,因此$ ifNull。 $ group只对它们进行分组,求和值有效,因为null为0,而$ max适用于其他字段,因为任何值都是>空。