【问题标题】:Mongo db Aggregate - $sum to add values if between datesMongodb Aggregate - $sum 如果在日期之间添加值
【发布时间】:2021-12-13 18:11:20
【问题描述】:

我希望编写一个查询来根据日期汇总数量。

我的文档如下所示:

{
    "_id" : 1234,
    "itemNumber" : "item 1",
    "date" : ISODate("2021-10-26T21:00:00Z"),
    "quantity" : 1,
    "__v" : 0
}

还有这样的查询:

//monogoose 

myCollection.aggregate().group({
        _id: '$itemNumber',
        ninetyDays: {
            $sum: {
                $and: {
                    $gte: ["date", dayjs().subtract(90, 'd').toDate()],
                    $lt: ["date", dayjs().toDate()]
                }

            }
        }
    })

在上面的查询中,ninetyDays 始终为 0。

我基本上是在寻找给定日期范围的数量总和。

非常感谢您的帮助。

谢谢

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    如果您的条件匹配,您可以使用$cond 求和 1 或 0。

    假设您的日期表达式是正确的,这应该可以,但不要在date 中伪造$。

    db.collection.aggregate([
      {
        "$group": {
          "_id": "$itemNumber",
          "ninetyDays": {
            "$sum": {
              "$cond": {
                "if": {
                  "$and": [
                    $gte: ["$date", dayjs().subtract(90, 'd').toDate()],
                    $lt: ["$date", dayjs().toDate()]
                  ]
                },
                "then": 1,
                "else": 0
              }
            }
          }
        }
      }
    ])
    

    示例 here 我使用过 mongo $$NOW,但如果您的日期有效,则使用您的代码更容易。

    【讨论】:

    • 工作就像一个魅力。我对此进行了试验,但有时从文档中有点难以理解。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多