【发布时间】:2017-06-23 12:07:56
【问题描述】:
数据如下:
{
"_id":5345345345,
"city": "Detroit",
"people":[
{
"name":"Larry",
"value":1200
},
{
"name":"Steve",
"value":1100
},
{
"name":"Larry",
"value":1000
},
{
"name":"Joe",
"value":800
},
{
"name":"Larry",
"value":500
},
{
"name":"Joe",
"value":700
}
]
}
我在一个聚合查询的中间有这个。我可以从这里做些什么来总结价值字段并为“人”中的每个人提供唯一的条目?即
{
"_id":5345345345,
"city": "Detroit",
"people":[
{
"name":"Larry",
"value":2700
},
{
"name":"Steve",
"value":1100
},
{
"name":"Joe",
"value":1500
}
]
}
此外,如果“人”数组为空,则不能有返回空文档的查询,例如,不能这样做:
{$unwind:{
path:people
}
},
{$group :
{
_id:"$people.name",
total_value:{"$sum":"people.value"}
}
}
如果在 people 数组为空时它没有返回空文档,那将可以正常工作。
需要以某种方式使用 $addToSet 和 $sum 吗?如何保持值与名称相关联?
【问题讨论】:
-
你颠覆了我的认知。
-
@Jack:当 people 数组为空时,为什么不能返回一个空文档?您在那里的查询看起来正确(这正是我自己推荐的),所以也许您的应用程序的代码需要能够处理空文档情况?
-
@VinceBowdren 感谢您的输入可能最终会这样做
-
@Jack 不确定这是否是您需要的。您可以在使用
$unwind之前使用$match阶段过滤空的人员数组文档。类似{$match:{"people":{$ne:[]}}}
标签: mongodb sum aggregation-framework