今天在处理需求的时候用到了 mongo 的分页查询的内容,但是发现第6页查询出的值居然在第7页也显示了出来,就好像查询返回了重复的值
后面一通排查发现,mongo 的 sort 排序一定要有有一个唯一的字段,否则不能保证每次 sort 出的结果的顺序都是相同的,参考 cursor.sort()
而自己排序的字段是按照创建时间来的,如果时间相同,则不保证返回的记录的顺序
解决方案:加一个排序字段(这个字段唯一就行),比如加上一个mongo的 _id 的字段,这样就能保证每次 sort 返回的结果都是相同的
另外 sort 与 limit 和 skip 连用时,sort 一定要在最前面,后面 limit 和 skip 的顺序无所谓
db.myColl.find().sort({_id: 1}).skip(3).limit(6);
db.myColl.find().sort({_id: 1}).limit(6).skip(3);
上面这种写法得出的结果是完全等价的