我最近已将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。但是我不知道该怎么做。
非常感谢您。
答案 0 :(得分:2)
您可以使用$ year,$ month按年,月对日期字段进行分组,然后计算该组的计数。一个示例查询看起来像这样-
db.col.aggregate([
{
$group: {
"_id": {
"year" : {
$year : "$createdDate"
},
"month" : {
$month : "$createdDate"
}
},
"count": {
$sum: 1
}
}
}
])
答案 1 :(得分:1)
如何按特定日期范围计数文档
您可以指定日期范围end
和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 }
}
}
] )
(此范围可以包括任意天数:一天,7天,30天等),并获得一个为此。
$group
该查询也可以 编写为单个{
$group: {
_id: null,
count: {
$sum: {
$cond: [
{ $and: [
{ $gte: [ "$created_at", start ] },
{ $lte: [ "$created_at", end ] }
] },
1,
0
]
}
}
}
}
阶段:
index.html