【问题标题】:How to Paginate after unwind in Spring boot with MongoDB?使用 MongoDB 在 Spring Boot 中展开后如何分页?
【发布时间】:2017-02-27 14:37:06
【问题描述】:

我目前遇到这样的问题:

我有一个对象 A,它有一个数组属性 Bs。我想在UI中显示Bs,但是因为数据太多,我不得不以某种方式进行分页。问题是,我做了一些研究,但找不到可以先展开,然后分页的解决方案。

答:

{
    id : 1,
    Bs : [{
        id: 29
    },{
        id : 3
    }]
}

如果我使用聚合,我可以展开 B,但之后不能对它们进行分页。分页是主要问题。

如果我使用 PagingAndSortingRepository,我可以分页,但不能放松。即使我之后手动展开,因为我在展开之前进行了分页,结果也不会像预期的那样。

如果我使用 Query - Criteria,我可以使用 skip & limit 进行分页,但在分页前仍然不知道如何展开。

大问题:我怎样才能先展开,然后对展开的结果进行分页?

编辑:

MongoDB 中的示例数据对象:

{
    id: 1,
    ts: 1488208130000,
    logs: [{
        id: 1,
        type: 4
    },{
        id: 2,
        type: 7
    }]
},
{
    id: 2,
    ts: 1488208150000,
    logs: [{
        id: 2,
        type: 4
    }]
}

我想用 startDate 和 endDate 之间的 ts 查询 logs,通过 ts 描述,如果指定也可以通过 type 查询。但是有太多的数据对象,例如如果你上周选择(它们几乎每秒 1 个),所以我需要分页。我不知道数据对象中有多少日志。所以,我不能先分页,然后展开日志。这个数字可能不匹配。我可能会查询数据收集 2. 大小为 100 的页面,但是当我展开日志时,其中可能有 47 个具有所需的type

【问题讨论】:

    标签: spring mongodb pagination


    【解决方案1】:

    您实际上可以使用 $slice 运算符在 mongo 中对数组进行切片。

    例如

    db.collection.findOne({_id:1}, {B: $slice: [start, end]})
    

    你可以用它做一些非常棒的事情。查看文档以获取更多示例:https://docs.mongodb.com/manual/reference/operator/projection/slice/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      相关资源
      最近更新 更多