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
这样做,其中lastRating
和lastID
是最后一个返回数组中最后一项的先前值但这不会返回任何内容。
【问题讨论】:
【参考方案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-aggregate-paginate-v2 中排序
mongoose-paginate 与 react 和 material-ui TablePagination - 单击 onChangePage 道具后第二页开始不呈现