当排序值相同时,Mongo 在$skip后不会保持$sort顺序



我的数据如下所示:

{ _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 按相同的值排序,并使用不同的方法来选择在跳过时使用哪个?有什么办法吗?

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

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

您可以使用排序和跳过

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

跳过是使用的第一个n文档跳过的数量。Mongodb没有像mysql那样的偏移量

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

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

最新更新