【问题标题】:mongodb complex aggregation nested conditional groupbymongodb复杂聚合嵌套条件groupby
【发布时间】:2021-04-14 23:17:31
【问题描述】:

我有一个订单集合,如下所示:

[
  {
    _id: ObjectID,
    date: Date,
    products: [
      {
        id: string,
        quantity: number
      },
      {
        id: string,
        quantity: number
      },
    ]
  }
]

我需要汇总它们,以便我可以使用 product.id 确定每个日期(而不是时间)每个 id 的数量

我的结果数据集看起来类似于:

[
  { 
    date: "2021-01-1", 
    products: {
      // product_id: quantity
      PRODUCT_ID_1: 4
      PRODUCT_ID_2: 9
    } 
  }
]

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: mongodb aggregation


    【解决方案1】:
    • $dateToString 将日期转换为您需要的特定格式
    • $unwind解构products数组
    • $group id, datequantity
    • $group 仅按日期并以键值格式构造产品数组
    • $arrayToObjectproducts 数组转换为对象
    db.collection.aggregate([
      {
        $addFields: {
          date: {
            $dateToString: {
              date: "$date",
              format: "%Y-%m-%d"
            }
          }
        }
      },
      { $unwind: "$products" },
      {
        $group: {
          _id: {
            date: "$date",
            id: "$products.id"
          },
          quantity: { $sum: "$products.quantity" }
        }
      },
      {
        $group: {
          _id: "$_id.date",
          products: {
            $push: {
              k: "$_id.id",
              v: "$quantity"
            }
          }
        }
      },
      {
        $project: {
          products: { $arrayToObject: "$products" }
        }
      }
    ])
    

    Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 2019-11-04
      • 1970-01-01
      • 2018-11-17
      • 2017-07-26
      • 2017-07-16
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多