【问题标题】:group by sum operation based multiple conditions in mongo DB基于 mongoDB 中的多个条件的 group by sum 操作
【发布时间】:2023-02-02 21:39:11
【问题描述】:

我在 MongoDB 中有一系列文档,如下所示:

{
    "_id" : ObjectId("63ceb466db8c0f5500ea0aaa"),
    "Partner_ID" : "662347848",
    "EarningsData" : [ 
        {
            "From_Date" : ISODate("2022-01-10T18:30:00.000Z"),
            "Scheme_Name" : "CUSTOMERWINBACKJCA01",
            "Net_Amount" : 256,
        }, 
        {
        "From_Date" : ISODate("2022-02-10T18:30:00.000Z"),
            "Scheme_Name" : "CUSTOMERWINBACKJCA01",
            "Net_Amount" : 285,
        }
    ],
    "createdAt" : ISODate("2023-01-23T16:23:02.440Z")
}

现在,我需要做的是为特定的Partner_ID 获取每个Scheme_Name 每月From_DateNet_Amount 的总和。

对于上述文档,输出将如下所示:

[
  {
    "Month" : 1,
    "Scheme_Name" : 'CUSTOMERWINBACKJCA01'
    "Net_Amount": 256
  },  
  {
    "Month" : 2,
    "Scheme_Name" : 'CUSTOMERWINBACKJCA01'
    "Net_Amount": 285 
  } 
]

我已尝试实施聚合管道并成功获得每个 Scheme_NameNet_Amount 的总和,但我无法弄清楚如何整合每个月的 From_Date 逻辑。

以下是查询示例:

var projectQry = [
        {
          "$unwind": {
            path : '$EarningsData',
            preserveNullAndEmptyArrays: true
          }
        },
        {
          $match: {
            "Partner_ID": userId
          }
        },
        {
          $group : {
            _id: "$EarningsData.Scheme_Name", 
            Net_Amount: { 
              $sum: "$EarningsData.Net_Amount" 
            }
          }
        },
        {
          $project: {
            _id: 0,
            Scheme_Name: "$_id",
            Net_Amount: 1
          }
        }
      ];

【问题讨论】:

    标签: javascript node.js mongodb mongoose aggregation-framework


    【解决方案1】:

    你需要解决一些问题,

    1. $match 将这个阶段移到第一个以获得更好的性能,如果您已经创建,可以使用索引
    2. $unwind 不需要 preserveNullAndEmptyArrays 属性,它保留空数组和 null 数组
    3. $group Scheme_NameFrom_Date 作为月份,通过$sum 运算符得到From_Date 的总和
    4. $project 显示必填字段
      db.collection.aggregate([
        { $match: { "Partner_ID": "662347848" } },
        { $unwind: "$EarningsData" },
        {
          $group: {
            _id: {
              Scheme_Name: "$EarningsData.Scheme_Name",
              Month: {
                $month: "$EarningsData.From_Date"
              }
            },
            Net_Amount: {
              $sum: "$EarningsData.Net_Amount"
            }
          }
        },
        {
          $project: {
            _id: 0,
            Net_Amount: 1,
            Scheme_Name: "$_id.Scheme_Name",
            Month: "$_id.Month"
          }
        }
      ])
      

      Playground

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多