【问题标题】: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} } 这样做,其中lastRating 和lastID 是最后一个返回数组中最后一项的先前值但这不会返回任何内容。
【问题讨论】:
标签:
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();