Здесь я только что создал коллекцию из 9 документов {id, name}.Все документы имеют одинаковое значение «A» поля name .
[
{
"name": "A",
"id": 1
},
{
"name": "A",
"id": 2
},
{
"name": "A",
"id": 3
},
{
"name": "A",
"id": 4
},
{
"name": "A",
"id": 5
},
{
"name": "A",
"id": 6
},
{
"name": "A",
"id": 7
},
{
"name": "A",
"id": 8
},
{
"name": "A",
"id": 9
}
]
Я хочу разбить эту коллекцию на страницы после сортировки по имени ( бесполезно длясортировать по имени в моем случае, но я поставил точку, чтобы вывести странное поведение ), 3 на 3. (размер страницы - 3).
Когда я выполняю агрегатный конвейер с $ skip 0, $предел 3 (первая страница):
db.collection.aggregate([
{
"$sort": {
"name": 1
}
},
{
"$skip": 0
},
{
"$limit": 3
}
])
Результат:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"id": 1,
"name": "A"
},
{
"_id": ObjectId("5a934e000102030405000001"),
"id": 2,
"name": "A"
},
{
"_id": ObjectId("5a934e000102030405000002"),
"id": 3,
"name": "A"
}
]
А теперь, когда я хочу получить следующую страницу ($ skip 3, $ limit 3),результат:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"id": 1,
"name": "A"
},
{
"_id": ObjectId("5a934e000102030405000002"),
"id": 3,
"name": "A"
},
{
"_id": ObjectId("5a934e000102030405000005"),
"id": 6,
"name": "A"
}
]
Мы отмечаем, что документы с идентификаторами 1 и 3 извлекаются снова.Это заканчивается плохой нумерацией страниц (дубликаты)!
Как вы это объясните, когда сортировка по неуникальному столбцу приводит к этому странному поведению?
Воспроизвести задачу https://mongoplayground.net/p/hP7CMtA3b2f