mongodb 聚合 按月分组统计

需求

先说下我的需求:查询用户每个月发布文章的天数,并以列表的形式返回。
举例:某用户在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'
        }
    }
}]

解析:

  1. $match
    查询所有符合条件文章。
    在这里插入图片描述

  2. $project
    返回帖子id,并把创建时间格式化输出
    在这里插入图片描述

  3. $group
    分组统计,并返回
    在这里插入图片描述

PS:截图中所使用的工具,mongodb compass

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值