Paginate Mongoose / MongoDB查询:从一个点开始按两个字段排序[重复]

Posted

技术标签:

【中文标题】Paginate Mongoose / MongoDB查询:从一个点开始按两个字段排序[重复]【英文标题】:Paginate Mongoose / MongoDB query: sort by two fields starting from a point [duplicate] 【发布时间】:2022-01-12 01:30:26 【问题描述】:

我想按rating 字段和_id 字段对集合进行排序,两者都降序 $sort: rating:-1 , _id:-1 。由于我使用的是$limit,我希望能够执行另一个请求来获取以下对象。我尝试使用$match 像这样 rating: $lte: lastRating, _id : $lt: lastID 这样做,其中lastRatinglastID 是最后一个返回数组中最后一项的先前值但这不会返回任何内容。

【问题讨论】:

【参考方案1】:

您所描述的称为分页

许多其他人(如this)已经深入描述了如何实现此模式。 这里留给其他人

但是,您的查询未在下一页返回任何文档的原因可能很简单,因为不正确地实现了 tiebreaker(我假设您使用 _id 作为 tiebreaker)。

它应该看起来像这样:

// page 1
collection
  .find()
  .sort( rating: -1, _id: -1 )
  .limit(limit)
  .toArray();
// page n
collection
  .find(
    $and: [
       ...any actual query here ,
      // this is the pagination query
      
        $or: [
           rating:  $lt: lastRating  ,
          
            rating: lastRating,
            _id:  $lt: ObjectId(lastID)  
        ]
    ]
  )
  .sort( rating: -1, _id: -1 )
  .limit(limit)
  .toArray();

【讨论】:

以上是关于Paginate Mongoose / MongoDB查询:从一个点开始按两个字段排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mongoose-paginate 按引用文档排序

mongoose-paginate 按引用文档排序

在 mongoose-aggregate-paginate-v2 中排序

使用mongoose-paginate-v2查询缓慢问题

mongoose-paginate 与 react 和 material-ui TablePagination - 单击 onChangePage 道具后第二页开始不呈现

Paginate Mongoose / MongoDB查询:从一个点开始按两个字段排序[重复]