【发布时间】:2018-08-03 18:34:16
【问题描述】:
我的pr 集合中有以下文档数据结构,我想将$group 与$avg 结合使用以获得特定字段的一些平均值:
第一个示例文档:
{
"_id" : "MRoPGeY7atYiPm5nW",
"HO" : "dfd>prZKfHepCR7jEB2Lk",
"SP" : 22,
"pInfos" : [
{
"pId" : "A",
"pK" : "B"
}
],
"Fs" : {
"CC" : {
"Output" : {
"CCOutput" : 24,
"CCOutput2" : 26
},
"FsResult" : 28
}
},
"SPS" : 30
}
第二个示例文档:
{
"_id" : "AAoPGeY7atYiPm5nW",
"HO" : "dfd>prZKfHepCR7jEB2Lk",
"SP" : 12,
"pInfos" : [
{
"pId" : "A",
"pK" : "B"
}
],
"Fs" : {
"CC" : {
"Output" : {
"CCOutput" : 24,
"CCOutput2" : 26
},
"FsResult" : 28
}
},
"SPS" : 30
}
还有几个具有相同结构的文档。我现在需要为具有相同HO 字段的所有文档获取SP 的平均值。我正在使用meteorhacks 包来使用mongos 聚合和流星,所以我的聚合查询看起来与原生查询完全不同。我通过这个查询得到了值:
pr.aggregate(
{ $match: { HO: "dfd>prZKfHepCR7jEB2Lk"} },
{ $group: { _id: '$HO', total: { $avg: '$SP' } } },
{ $project: {total:1, _id:0 } }
);
我得到了我想要的结果:
[ {_id: 'dfd>prZKfHepCR7jEB2Lk', total: 17 } ]
但是,我无法从具有相同 HO 字段的所有文档中获得嵌套字段的平均值,例如 CCOutput 或 FsResult。此外,我不清楚如何将pK 之类的嵌套字段用于$match,因为对于具有相同@ 的所有文档,我还需要SP、CCOutput 和FsResult 的平均值例如 987654338@ 字段。
我认为如何将$match 和$group 与嵌套字段一起使用的常见(Mongo 原生)方式也适用于meteorhacks。
【问题讨论】:
-
您的查询语法不正确
-
我得到结果的问题中的查询通过使用 meteorhacks:aggregate 包工作,我需要在流星框架中使用 mongos 聚合函数。
-
啊哦。我的错。
标签: arrays mongodb object meteor aggregation-framework