【问题标题】:How to group By dates and get the counts in mongodb?如何按日期分组并获取 mongodb 中的计数?
【发布时间】:2021-04-24 01:08:17
【问题描述】:

我想根据日期对文档进行分组并获取日期的计数。我在下面的汇总查询, 当我尝试这个查询时,它给出了日期的单独列表

{
        "$project": {
          "deliveryDate": {
            "$dateToString": { "format": "%Y-%m-%d", "date": "$deliveryDate" }
          },
          "counts": {
            "$multiply": [
              { "$size": "$products" },
              {
                "$sum": 1
              }
            ]
          }
        }
      }

这是我下面的文件,

[{
        "id": 1,
        "deliveryDate": "13-03-2021",
        "products": [{
                "name": "Milk",
                "qty": 3
            },
            {
                "name": "Egg",
                "qty": 10
            }
        ]
    },
    {
        "id": 2,
        "deliveryDate": "13-03-2021",
        "products": [{
                "name": "Milk",
                "qty": 5
            },
            {
                "name": "Egg",
                "qty": 15
            }
        ]
    },
    {
        "id": 3,
        "deliveryDate": "15-03-2021",
        "products": [{
                "name": "Milk",
                "qty": 3
            },
            {
                "name": "Egg",
                "qty": 10
            }
        ]
    }
]

我基于日期的预期输出应该在数组中添加qty 应该给出日期的计数总和

[
  {
    "deliveryDate": "13-03-2021",
    "count" : 33
  },
  {
    "deliveryDate": "15-03-2021",
    "count" : 13
  }
]

logic ==> 根据日期获取所有文档并添加数量,计算计数 如果这可能与 mongodb 查询本身有关 提前谢谢!!

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案1】:
    • $sum 在同一字段中获得 qty 的总和 products
    • $group by deliveryDate 得到产品数量的总和
    db.collection.aggregate([
      { $addFields: { products: { $sum: "$products.qty" } } },
      {
        $group: {
          _id: "$deliveryDate",
          count: { $sum: "$products" }
        }
      }
    ])
    

    Playground

    【讨论】:

    • 是的,效果很好,性能也很棒
    猜你喜欢
    • 2016-01-03
    • 2020-04-08
    • 1970-01-01
    • 2019-04-22
    • 2016-11-24
    • 2015-05-31
    • 1970-01-01
    • 2013-11-05
    • 2019-01-19
    相关资源
    最近更新 更多