为空时聚合错误(Mongodb)

为空时聚合错误(Mongodb),mongodb,aggregation-framework,Mongodb,Aggregation Framework,因此,对于某些数据点,我有一个空的或没有文档的数据。 下面是一些演示数据的命令集 db.perfR.find({platform:"mac", "filename" : "f1.json"},{filename:1, platform:1, int_secs:1, version:1, _id:0}) { "filename" : "f1.json", "platform" : "mac", "version" : "1.4.14", "int_secs" : 15 } 仅表示“Mac”的一

因此,对于某些数据点,我有一个空的或没有文档的数据。 下面是一些演示数据的命令集

db.perfR.find({platform:"mac", "filename" : "f1.json"},{filename:1, platform:1, int_secs:1, version:1, _id:0})

{ "filename" : "f1.json", "platform" : "mac", "version" : "1.4.14", "int_secs" : 15 }
仅表示“Mac”的一个条目

表示没有Win条目

下面是聚合命令

db.perfR.aggregate([ {$sort:{version: -1 }},{ $group:{ _id: {platform:"win", "filename" : "f1.json", version:"$version"}, avgSecs: {$avg:"$int_secs"} } }])
和输出

{ "_id" : { "platform" : "win", "filename" : "f1.json", "version" : "1.4.13" }, "avgSecs" : 759 }
{ "_id" : { "platform" : "win", "filename" : "f1.json", "version" : "1.4.14" }, "avgSecs" : 415.46153846153845 }
{ "_id" : { "platform" : "win", "filename" : "f1.json", "version" : "3.0.0_dev" }, "avgSecs" : 563.8333333333334 }
我很困惑Mongodb从哪里获取所有数据,以及如何限制它以查找存在的值

注意:其他版本还有其他条目,为了简洁起见,我没有在这里显示这些条目


任何改进聚合命令的指针都很有用

您在组id规范中提供了字符串文字:

_id: {platform:"win", "filename" : "f1.json", version:"$version"}
“win”
“f1.json”
只是字符串文本。文档中只有一个字段用于_id-它是
“$version”
。因此,对于文档中的三个不同版本值,有三个组

正确的id定义是

_id: {platform:"$platform", filename : "$filename", version:"$version"}
这将按三个字段对文档进行分组

注意:若要按某个字段筛选集合,则应使用$match stage

_id: {platform:"$platform", filename : "$filename", version:"$version"}