代码之家  ›  专栏  ›  技术社区  ›  Jaybruh

Mongo aggregate-如何在对象数组字段中使用$match和$group?

  •  0
  • Jaybruh  · 技术社区  · 7 年前

    在我的 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
        }
    

    有多个具有相同结构的文档。我现在需要得到 SP 对于所有具有相同 HO 领域我使用Meteohacks包可以将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公司 ,则, C输出 FsResult公司 对于所有具有相同 主键 例如,字段。

    我认为使用 $匹配 $组 使用嵌套字段也可以使用meteorhacks。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nicolas    7 年前

    尝试使用虚线符号:

    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驱动程序一样,但我认为这个查询可以工作