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

zpgglvta  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(482)

我有一个集合,我想通过使用datecreated字段将其排序为decenting来进行分页查询,以获取最新文档。
我等着呢 lastKnownCommentId (对象id)用于性能目的。有 lastKnownCommentId 避免在下次分页时再次加载文档,如果没有,则应用 limit on查询将导致性能问题。

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
        }
    }
);
lymgl2op

lymgl2op1#

是什么 query 看起来像是在你还它之前(打印出值,如果是对象,则执行for循环,这样您就可以看到值是什么)。

相关问题