这是我正在使用的功能
MyModel.aggregate([
{ $match: query },
{ $sort: { 'createdAt': -1 } },
{ $skip: skip },
{ $limit: 10 }
], { allowDiskUse : true });
Run Code Online (Sandbox Code Playgroud)
query是过滤行。skip是基于分页的动态值(即0、10、20...)。问题是,每页的行都是错误的。例如,我可以同时看到第1,2,3,4页中的特定行!有些行也丢失了。
为什么会发生这种情况?
我认为这个问题的关键是您在此评论中分享的信息:
createdAt对于许多行具有相同的值。有没有可能$sort无法正常工作?
这并不是说排序不一定“正常工作”,而是它没有足够的信息来每次进行确定性排序。的值本身123并不出现在另一个值之前或之后。123正如@Noel 指出的,您需要为您的排序提供一个附加字段。
文档中也对此进行了介绍:
MongoDB 不按特定顺序将文档存储在集合中。对包含重复值的字段进行排序时,包含这些值的文档可能会以任何顺序返回。
如果需要一致的排序顺序,请在排序中至少包含一个包含唯一值的字段。保证这一点的最简单方法是
_id在排序查询中包含该字段。
这是因为该_id领域是独一无二的。如果您采取这种方法,它会将您的排序更改为:
{ $sort: { 'createdAt': -1, _id: 1 } },
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |