当排序值相同时,Mongo在$ skip之后不维护$ sort顺序

时间:2019-09-10 15:12:34

标签: mongodb sorting aggregation-framework

我的数据如下:

{ _id: 1, x: "abc", y: "def"}
{ _id: 2, x: "abc", y: "efg"}
{ _id: 3, x: "xxx", y: "xxx"}

我的查询如下:

db.col.aggregate([{ $sort: { x: 1 } },{ $skip: 0 } ])

运行该查询时,我按顺序看到所有内容:1、2、3 当我将skip更改为1时,我得到1,3 当进行排序时,是否在内部识别出文档1和2是按相同的值排序的,并且使用不同的方法来选择跳过时要使用的文档?有什么办法解决吗?

2 个答案:

答案 0 :(得分:0)

您的查询正确可能是版本问题创建问题

db.col.aggregate([{ $sort: { x: 1, _id: 1 } }, { $skip: 1 } ])

您可以使用sortskip

db.col.find({ }).sort( { x: 1, _id: 1 } ).skip(1);

跳过是第一个n文档跳过的次数。 Mongodb没有像mysql

这样的偏移量

答案 1 :(得分:0)

由于x字段的值相同,因此您需要在$sort阶段再使用一个字段,而_id可能是最好的用法。

{ $sort: { x: 1, _id: 1 } }