按时间,日期和月份对mongodb聚合进行排序

时间:2019-03-01 11:12:02

标签: mongodb sorting datetime aggregation

我有一个聚合管道,该管道按最近24小时排序。 Json输出通常如下所示:

[{"_id": {"day": 28, "hour": 23}, "count": 2},

但是,因为今天是本月的第一天,所以它混在一起了,并且上面的json是“最新的”,而所有包含“ day”:1的内容都排在最后。

我认为我通过在查询中添加“ month”来解决此问题,但是只是为了确保这是对聚合进行排序的正确方法?

pipeline = [
        {
            "$project": {
                "_id": 1,
                "mac": 1,
                "time": 1
            }
        },

        {"$match": {"time": {"$gt": timenow-timedelta(hours=24)}}},

        {"$group": {
            "_id": {
                'month': {"$month": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
                'day': {"$dayOfMonth": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
                'hour': {"$hour": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
                'mac': {'_id': "$mac"}

            },
            "count": {"$sum": 1}

        }},

        {
            "$group": {
                "_id": {
                    'month':"$_id.month",
                    'day': "$_id.day",
                    'hour': "$_id.hour",
                },
                "count": {"$sum": 1}
            }
        },

        {"$sort": SON([("_id", -1)])}
    ]

0 个答案:

没有答案