У меня есть этот запрос агрегации:

db.getCollection('collectionName').aggregate([

{
    $facet: {
        "myAttrName": [
            {
                $match: {
                    $or: [
                        {
                            "key1": "value1"
                        },
                        {
                            "key2": "value2"
                        }
                    ],
                    status: "OK"
                }
            },
            {
                $skip: 0
            },
            {
                $limit: 10
            },
            {
                $sort: {
                    timestamp: -1
                }
            }
        ]
    }
}



])

Ну .. он не сортирует результаты должным образом. Я просто вижу, что они упорядочены по времени добавления «фифо».

Когда я просто выполняю обычный поиск ( без агрегирования ) с .sort({timestamp: -1}), он работает правильно.

Что мне здесь не хватает?

2
Raz 7 Сен 2020 в 10:24

1 ответ

Лучший ответ

Этапы агрегирования выполняются по порядку, на этапах $skip и $limit вашего запроса выполняются до $sort, поэтому сортировка будет применяться только в 10 документах,

Вы можете переместить состояние $sort до этапа $skip.

Детская площадка

2
turivishal 7 Сен 2020 в 07:42