【问题标题】:How can I count documents by specific date range如何按特定日期范围计算文档
【发布时间】:2020-04-18 09:18:21
【问题描述】:

我最近将sql切换到mongodb,遇到了一个问题。

搜索架构:

new mongoose.Schema({
content: {
    type: String,
    required: true
},
created_at: {
    type: Date,
    default: Date.now
})

一些文档:

_id:5e077923f08564374cea9f55
content:"ds"
created_at:2019-12-28T15:47:47.318+00:00

_id:5e077924f08564374cea9f56
content:"ds"
created_at:2019-12-28T15:47:48.545+00:00

_id:5e07792bf08564374cea9f57
content:"d"
created_at:2019-12-28T15:47:55.585+00:00

如何计算一天/一周/一个月的搜索量。

我有一个想法,尝试将日期转换为 int。但我不知道该怎么做。

非常感谢。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您可以使用 $year, $month 按年、月对日期字段进行分组,然后计算该组的计数。一个示例查询如下所示 -

    db.col.aggregate([  
        {
            $group: {
                    "_id": {
                        "year" : {
                            $year : "$createdDate"
                        },
                        "month" : {
                            $month : "$createdDate"
                        }
                    },
                    "count": {
                        $sum: 1
                    }   
                }
        }    
    ])
    

    【讨论】:

      【解决方案2】:

      如何按特定日期范围计算文档数

      您可以指定日期范围,startend(此范围可以包括任意天数:一天、7 天、30 天等)并获得一个计数 em> 为此。

      var start = ISODate("2019-12-25T09:00:00.000+00:00")
      var end = ISODate("2019-12-30T17:00:00.000+00:00")
      
      db.dates.aggregate( [
        { 
            $match: { 
                $and: [ { created_at: { $gte: start } }, 
                        { created_at: { $lte: end } } 
                      ] 
            } 
        },
        { 
            $group: { 
                _id: null, 
                count: { $sum: 1 } 
            } 
        }
      ] )
      


      查询也可以写成单个$group 阶段:

      { 
        $group: { 
            _id: null, 
            count: { 
                $sum: {
                     $cond: [ 
                         { $and: [ 
                               { $gte: [ "$created_at", start ] }, 
                               { $lte: [ "$created_at", end ] } 
                          ] }, 
                          1, 
                          0
                     ]
                } 
            } 
        } 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多