【发布时间】:2021-02-12 23:09:33
【问题描述】:
当我使用 mongodb 聚合进行分页时,我发现了一个问题。我会详细介绍一下。此问题仅在排序时发生。我做了一个模式来保持简单。 模型有一个随机生成的计数(数字)用于排序,并具有 id(数字),以便我们可以直观地进行排序并且它是唯一的。
像聚合管道
db.getCollection('test').aggregate([{
$sort:{
count:-1
}
},
{
$skip : 0
},
{
$limit :2
}])
示例限制 2 返回数据
/* 1 */
{
"_id" : ObjectId("6027005ffba493078dca3580"),
"count" : 9,
"id" : 38
}
/* 2 */
{
"_id" : ObjectId("6027005ffba493078dca3565"),
"count" : 9,
"id" : 11
}
当限制示例 3 返回数据
/* 1 */
{
"_id" : ObjectId("6027005ffba493078dca3587"),
"count" : 9,
"id" : 45
}
/* 2 */
{
"_id" : ObjectId("6027005ffba493078dca3580"),
"count" : 9,
"id" : 38
}
/* 3 */
{
"_id" : ObjectId("6027005ffba493078dca3565"),
"count" : 9,
"id" : 11
}
对于限制 2 第一个元素 id = 38, 对于限制 3 第一个元素 id = 45
对于不同的限制跳过值,对于相同的值排序,它总是返回不同的响应。 这个问题使我无法正确分页。
如果我添加第二个排序示例
$sort:{
count:-1
_id: 1
}
}
解决了。
是什么原因?还有其他解决方案?
【问题讨论】:
-
默认情况下,mongo 会按找到的顺序输出值,因此没有“默认排序”或其他方式,只能按所需值排序。
标签: database mongodb sorting aggregate