【问题标题】:Mongo Group By SUMMongodb Group By SUM
【发布时间】:2017-11-07 12:15:53
【问题描述】:

我有以下记录:

{
"_id" : ObjectId("5a0108d11b4af44a24d36e72"),
"Country" : "MY",
"Company_ID" : "MY01",
"Staff_ID" : "NBJ64",
"Calculation" : {
    "CustSatisfaction" : [ 
        {
            "Trans_Year" : 2017,
            "Trans_Month" : 7,
            "HH" : 10,
            "HN" : 0,
            "NH" : 4,
            "NN" : 0
        }, 
        {
            "Trans_Year" : 2017,
            "Trans_Month" : 7,
            "HH" : 1,
            "HN" : 0,
            "NH" : 5,
            "NN" : 0
        }
    ]
}
  }

我试图获得 HH、HN、NH、NN 的 SUM 结果,如下所示,按 Trans_Year 和 Trans_Month 分组:

{
"_id" : ObjectId("5a0108d11b4af44a24d36e72"),
"Country" : "MY",
"Company_ID" : "MY01",
"Staff_ID" : "NBJ64",
"Calculation" : {
    "CustSatisfaction" : [ 
        {
            "Trans_Year" : 2017,
            "Trans_Month" : 7,
            "HH" : 11,
            "HN" : 0,
            "NH" : 9,
            "NN" : 0
        }
    ]
}
  }

我的总计有以下代码:

            var grouping = new BsonDocument {
        { "_id", new BsonDocument { { "build", "$WeCare.CustSatisfaction.Trans_Year" }, { "status", "$WeCare.CustSatisfaction.Trans_Month" } } },
        { "HH", new BsonDocument("$sum", 1)  }
    };
            var aggregate = mongoDB.Consultant.Aggregate().Group(grouping).ToList();

我得到的结果变成 {{ "_id" : { "build" : [2017, 2017], "status" : [7, 7] }, "HH" : 1 }}。这很奇怪。

【问题讨论】:

  • Trans_Year 和 Trans_Month 在一个文档的一个 CustSatisfaction 字段中是否始终相同?还是该数组中的年份和月份会有所不同,从而迫使您跨文档求和?
  • 年份和月份可能会有所不同。这只是一个例子。
  • 对不起!另外:您是否也希望按 Country、Company_ID 和 Staff_ID 进行分组?即按这三个 AND Trans_Year 和 Trans_Month 分组?还是只能按 Trans_Year 和 Trans_Month?
  • 哦,是的。Country、Company_ID 和 Staff_ID 也需要分组。对不起,我的错。
  • 不要羞于回答 +1。

标签: c# mongodb


【解决方案1】:

好的,所以它本质上是一个 5 路组(国家、公司、员工以及数组中的年份和月份)。这应该可以解决问题:

db.foo.aggregate([
{$unwind: "$Calculation.CustSatisfaction"} // important step!
,{$group: {_id: {country: "$Country",
             company: "$Company_ID",
             staff: "$Staff_ID",
             year: "$Calculation.CustSatisfaction.Trans_Year",
             mon: "$Calculation.CustSatisfaction.Trans_Month"},
       tHH: {$sum: "$Calculation.CustSatisfaction.HH"},
       tHN: {$sum: "$Calculation.CustSatisfaction.HN"},
       tNH: {$sum: "$Calculation.CustSatisfaction.NH"},
       tNN: {$sum: "$Calculation.CustSatisfaction.NN"}
}}
                ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多