找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 149|回复: 0

mongoose 按日期分组查询问题

[复制链接]

1091

主题

0

回帖

3307

积分

管理员

积分
3307
发表于 2023-12-3 14:04:14 | 显示全部楼层 |阅读模式
表的结构:
{
        "point": "625fa3ccd3ebc0de0f1837d9",
        "_id": "625fb7ad9c9d58cdc664fde5",
        "create": "2022-04-20T07:35:09.203Z",
        "update": "2022-04-20T07:35:09.203Z",
        "__v": 0
    }

现在需要按照时间,每分钟统计次数,得到如下 aggregate:
this.reportModel.aggregate([
                {$match: {point:data[0]._id,}},
                {$project: {
                    date1Str: {$dateToString: {format: "%Y-%m-%d %H:%M", date:"$create",timezone:"+08:00"}},
                 }},
                {$group: {_id: "$date1Str", total: {$sum: 1}}},
                {$sort:{_id:1}}
            ]).exec()

查出来的数据,只统计了有数据的日期
[
        {
            "_id": "2022-04-20 14:10",
            "total": 8
        },
        {
            "_id": "2022-04-20 14:11",
            "total": 1
        },
        {
            "_id": "2022-04-20 14:19",
            "total": 1
        },
        {
            "_id": "2022-04-20 14:20",
            "total": 6
        },
        {
            "_id": "2022-04-20 14:25",
            "total": 8
        },
        {
            "_id": "2022-04-20 15:16",
            "total": 1
        },
        {
            "_id": "2022-04-20 15:35",
            "total": 1
        }
    ]

如何实现没有数据的日期自动补 0 ,例如:
[
        {
            "_id": "2022-04-20 14:10",
            "total": 8
        },
        {
            "_id": "2022-04-20 14:11",
            "total": 0
        },
        {
            "_id": "2022-04-20 14:12",
            "total": 0
        },
        {
            "_id": "2022-04-20 14:11",
            "total": 1
        },
        ...

    ]


我的理解是需要先在程序里初始化一些没有数据的日期范围吧?不然数据库也无法知道“没有数据的日期”是什么。
标记一下,也遇到了这个问题。
这个不应该在 mongoose 上做 应该在 js 代码自己补一下
很像 mysql 的分组统计问题,mysql 是先搞出日期表作为主表,join 分组后的表,如果 null 设置 0觉得这种场景在后端程序来的更快捷,后端一次循环,免去一大段 sql
@oneisall8955 感谢回答
@tanrunhao 那这样在 service 层处理一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|张迁碑

GMT+8, 2024-10-31 19:14 , Processed in 0.109014 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表