我的pr
集合中包含以下文档数据结构,我想将$group
与$avg
结合使用,以获取特定字段的平均值:
第一个示例doc:
{
"_id" : "MRoPGeY7atYiPm5nW",
"HO" : "dfd>prZKfHepCR7jEB2Lk",
"SP" : 22,
"pInfos" : [
{
"pId" : "A",
"pK" : "B"
}
],
"Fs" : {
"CC" : {
"Output" : {
"CCOutput" : 24,
"CCOutput2" : 26
},
"FsResult" : 28
}
},
"SPS" : 30
}
第二个示例doc:
{
"_id" : "AAoPGeY7atYiPm5nW",
"HO" : "dfd>prZKfHepCR7jEB2Lk",
"SP" : 12,
"pInfos" : [
{
"pId" : "A",
"pK" : "B"
}
],
"Fs" : {
"CC" : {
"Output" : {
"CCOutput" : 24,
"CCOutput2" : 26
},
"FsResult" : 28
}
},
"SPS" : 30
}
还有几个具有相同结构的文档。我现在需要为具有相同SP
字段的所有文档获取HO
的平均值。我使用meteorhacks包能够使用mongos聚合与meteor,所以也许我的聚合查询看起来与本机完全不同。我通过此查询获取值:
pr.aggregate(
{ $match: { HO: "dfd>prZKfHepCR7jEB2Lk"} },
{ $group: { _id: '$HO', total: { $avg: '$SP' } } },
{ $project: {total:1, _id:0 } }
);
我得到了我想要的结果:
[ {_id: 'dfd>prZKfHepCR7jEB2Lk', total: 17 } ]
但是,我无法从具有相同CCOutput
字段的所有文档中获取FsResult
或HO
等嵌套字段的平均值。另外,我不清楚如何为pK
使用$match
之类的嵌套字段,因为我还需要SP
,CCOutput
和{{1}的平均值例如,对于具有相同FsResult
字段的所有文档。
我认为如何将pK
和$match
与嵌套字段一起使用的常见(Mongo原生)方式也适用于meteorhacks。
答案 0 :(得分:1)
尝试使用虚线表示法:
pr.aggregate([
{$match: {HO: "dfd>prZKfHepCR7jEB2Lk"}},
{$group: {_id: "$HO", total: {$avg: "$SP"}, totalCCoutput: {$avg: "$Fs.CC.Output.CCoutput"}, totalFs: {$avg: "$Fs.CC.FsResult"}}}
]);
我写的就像我使用Nodejs Mongo驱动程序一样,但我认为这个查询可以正常工作