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

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

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 2015-01-20
      • 2018-05-12
      • 1970-01-01
      • 2012-11-14
      • 2012-07-15
      • 2013-04-26
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多