在字段mongodb上执行分页和排序时出现问题



我有一个集合,我想通过用dateCreated字段对其进行排序来进行分页查询,以获取最新文档。

我持有lastKnownCommentId(对象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循环,以便查看值(。

最新更新