假设我们在集合中有这样的文件
{
_id: {
element_id: '12345',
name: 'foobar'
},
value: {
count: 1
}
}
我正在使用聚合框架来执行$group
,就像这样
db.collection.aggregate([
{ $group: { _id: '$_id.element_id', total: { $sum: '$value.count' } } }
])
得到了
的结果{ "result" : [ { "_id" : null, "total" : 1 } ], "ok" : 1 }
请注意,结果中的_id
字段为空。从实验开始,$ group似乎不允许其_id
的嵌套字段声明(例如{{ 1}})。
这是为什么?它有解决方法吗?
谢谢。
答案 0 :(得分:10)
我找到了使用$project
的解决方法。
db.collection.aggregate([
{ $project: { element_id: '$_id.element_id', count: '$value.count' } },
{ $group: { _id: '$element_id', total: { $sum: '$count' } } }
])
$ project通过重命名,添加或删除字段来重塑文档流。
http://docs.mongodb.org/manual/reference/aggregation/#_S_project
答案 1 :(得分:3)
结果证明问题是SERVER-7491。它似乎已在2.2.2(大约3天前发布)中修复。
上面提到的解决方法在2.2.1中对我有用。需要注意的是,当使用$ project解决方法(2.2.2之前的版本)不包括来自带有_id:0的$项目中的_id时,由于看起来表现得很奇怪,所以我最终得到了一些正常工作,其中一些部分位于在同一聚合中的最终结果中缺少_id字段。