Сортировка агрегации mongodb по времени, дате и месяцу - PullRequest
0 голосов
/ 01 марта 2019

У меня есть конвейер агрегации, который сортирует по последним 24 часам.Вывод Json обычно выглядит примерно так:

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

Однако, поскольку сегодня первое число месяца, оно перепуталось, а вышеприведенный json был «последним», в то время как все, что содержит «день»: 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)])}
    ]
...