需求
先说下我的需求:查询用户每个月发布文章的天数,并以列表的形式返回。
举例:某用户在2020年12月份12号、8号、15号、22号曾经发布过文章,把所有发布文章的日期在数组中返回。
实现
以下是使用mongodb聚合实现命令。
[{
$match: {
createTime: {
$lt: 1586044883668,
$gt: 1581052614344
},
authorId: 'stff13d19c632be44781ad497afd'
}
}, {
$project: {
year: {
$year: {
$add: [
ISODate('1970-01-01T00:00:00.000Z'),
'$createTime'
]
}
},
month: {
$month: {
$add: [
ISODate('1970-01-01T00:00:00.000Z'),
'$createTime'
]
}
},
day: {
$dayOfMonth: {
$add: [
ISODate('1970-01-01T00:00:00.000Z'),
'$createTime'
]
}
},
_id: 1,
threadId: 1
}
}, {
$group: {
_id: null,
count: {
$sum: 1
},
publishDays: {
$addToSet: '$day'
}
}
}]
解析:
-
$match
查询所有符合条件文章。
-
$project
返回帖子id,并把创建时间格式化输出
-
$group
分组统计,并返回
PS:截图中所使用的工具,mongodb compass