MongoDB查询处理/获取内部数组(需要在内部数组中应用分页)

Posted

技术标签:

【中文标题】MongoDB查询处理/获取内部数组(需要在内部数组中应用分页)【英文标题】:MongoDB query to handle/fetch inner array (Need to apply pagination in inner array) 【发布时间】:2020-11-13 02:14:38 【问题描述】:

我有一个包含如下文档的集合,

Document1:


    name: "tester1",
    reports: [
            name: "report1",
            type: "overflow"
        ,
        
            name: "report2",
            type: "invalid form"
        
    ]


Document2:


    name: "tester2",
    reports: [
            name: "report3",
            type: "crossed"
        ,
        
            name: "report4",
            type: "unknown issue"
        
    ]
 

Document3:

    name: "tester3",
    reports: [
            name: "report4",
            type: "try again"
        ,
        
            name: "report6",
            type: "invalid data"
        
    ]

我正在尝试实现查询以获取数据,例如,

[
        name: "report1",
        type: "overflow"
    ,
    
        name: "report2",
        type: "invalid form"
    ,
    
        name: "report3",
        type: "crossed"
    ,
    
        name: "report4",
        type: "unknown issue"
    ,
    
        name: "report4",
        type: "try again"
    ,
    
        name: "report6",
        type: "invalid data"
    
]

我尝试使用分组和投影,但无法生成此输出。

我只需要内部数组作为最终文档,这样我就可以应用聚合查询来实现分页和搜索。

【问题讨论】:

每个文档都包含上面的数组?我正在尝试理解您的文档 不,我已经添加了三个带数据的文档 你需要做什么样的“搜索”? 【参考方案1】:

您可以使用$unwind 和$replaceRoot 将reports 提升到根级别,然后您可以使用$skip 或$limit:

db.collection.aggregate([
     $unwind: "$reports" ,
     $replaceRoot:  newRoot: "$reports"  ,
     $limit: 5 
])

Mongo Playground

【讨论】:

以上是关于MongoDB查询处理/获取内部数组(需要在内部数组中应用分页)的主要内容,如果未能解决你的问题,请参考以下文章

$eq 内部过滤器不适用于数组字段 - Mongodb

带有 elemMatch 的 MongoDB 查询,用于从对象内部匹配嵌套数组数据 [重复]

如何从 mongodb 查询和获取数组中的一项?

在MongoDB中将数据插入内部数组

无法查询嵌套的猫鼬数组?

子数组中的 MongoDB 更新查询