【问题标题】:Mongo doesn't maintain $sort order after $skip when sort values are same当排序值相同时,Mongo 在 $skip 之后不维护 $sort 顺序
【发布时间】:2019-09-10 15:12:34
【问题描述】:

我的数据如下所示:

{ _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 是按相同的值排序的,并且在跳过时使用不同的方法来选择要使用的方法?有没有办法解决这个问题?

【问题讨论】:

  • $sort_id 字段或一些时间戳字段一起使用。否则两个值(abc)都相同。 { $sort: { x: 1, _id: 1 } }
  • 这行得通,但我希望避免或更好地理解原因,但我认为这就是我必须要做的

标签: mongodb sorting aggregation-framework


【解决方案1】:

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

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

您可以使用sortskip

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

Skip 是第一个n doc 跳过的使用次数。 Mongodb没有像mysql这样的偏移量

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2021-05-19
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      相关资源
      最近更新 更多