Mongodb Aggregate - $sum 如果在日期之间添加值

Posted

技术标签:

【中文标题】Mongodb Aggregate - $sum 如果在日期之间添加值【英文标题】:Mongo db Aggregate - $sum to add values if between dates 【发布时间】: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。

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

非常感谢您的帮助。

谢谢

【问题讨论】:

【参考方案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,但如果您的日期有效,则使用您的代码更容易。

【讨论】:

工作就像一个魅力。我对此进行了试验,但有时从文档中有点难以理解。谢谢!

以上是关于Mongodb Aggregate - $sum 如果在日期之间添加值的主要内容,如果未能解决你的问题,请参考以下文章

mongodb聚合查询

MongoDB:聚合aggregate

使用aggregate在MongoDB中查找重复的数据记录

MongoDB Aggregate Methods MonoDB 的 3 种聚合函数

Mongodb 高级

MongoDB 2高级操作