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

时间:2019-12-29 05:30:18

标签: mongodb mongoose

我最近已将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。但是我不知道该怎么做。

非常感谢您。

2 个答案:

答案 0 :(得分:2)

您可以使用$ year,$ month按年,月对日期字段进行分组,然后计算该组的计数。一个示例查询看起来像这样-

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

答案 1 :(得分:1)

  

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

您可以指定日期范围endvar 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 } } } ] ) (此范围可以包括任意天数:一天,7天,30天等),并获得一个为此

$group


该查询也可以 编写为单个{ $group: { _id: null, count: { $sum: { $cond: [ { $and: [ { $gte: [ "$created_at", start ] }, { $lte: [ "$created_at", end ] } ] }, 1, 0 ] } } } } 阶段:

index.html