[英]Query mongoDB sorting by array value and using pagination in Springdata MongoDB
[英]Problem doing pagination with sorting on field mongodb
我有一个集合,我想通过使用 dateCreated 字段对其进行排序以获取最新文档来进行分页查询。
出于性能目的,我持有lastKnownCommentId
(Object id)。 拥有lastKnownCommentId
将避免在下一个分页期间重新开始加载文档,如果没有,则对查询应用limit
将导致性能问题。
Query<Comment> query = datastore.createQuery(Comment.class)
.field(POST_ID).equal(postId);
if (lastKnownCommentId != null) {
query.field(FieldConstants.OBJECT_ID).greaterThan(new ObjectId(lastKnownCommentId));
}
query.order(Sort.descending(FieldConstants.DATE_CREATED));
return query.asList(new FindOptions().limit(10));
现在我在这个集合中有 12 个文档与一个postId
匹配。 当使用lastKnownCommentId=null
为第一次分页执行此查询时,它给了我 10 个按日期排序的文档,2 个文档仍然不在分页图片中。
对于lastKnownCommentId=someId
(someId 是从第一次分页获得的最后一个文档的对象 ID)的第二次分页,它再次给了我 9 个文档作为结果,而不是保留在第一个分页中的 2 个文档。
如果我不按日期排序,一切都很好,我可以完全跳过这种排序,而是对数组列表进行排序。 我不明白为什么在查询中排序会发生这种情况。
我试图与聚合和结果相同的输出进行交叉检查。
db.comment.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
"postId":{"$eq":"5fb2090fe4d37312a4c3ce59"}
}
},
// Stage 2
{
$sort: {
"dateCreated":-1
}
},
// Stage 3
{
$match: {
"_id":{"$gt":ObjectId("5fb0e53392ad724f9026d2f7")}
}
},
// Stage 4
{
$limit: // positive integer
10
},
],
// Options
{
cursor: {
batchSize: 50
}
}
);
在返回之前query
什么样的? (打印出该值,或者如果它是一个对象,则执行 for 循环,以便您可以看到这些值是什么)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.