【发布时间】:2021-11-15 23:11:27
【问题描述】:
在这里,我刚刚创建了一个包含 9 个文档 {id, name} 的集合。 所有文档都具有相同的字段name的值“A”。
[
{
"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 x 3。(页面大小为 3)。
当我使用 $skip 0, $limit 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"
}
]
我们注意到 id 为 1 和 3 的文档被再次提取。这最终会导致分页错误(重复)!
当对非唯一列进行排序导致这种奇怪行为时,您如何解释这一点?
【问题讨论】:
标签: mongodb sorting pagination duplicates aggregation-framework