一个复杂的 MongoDB 查询(高级嵌套)

Posted

技术标签:

【中文标题】一个复杂的 MongoDB 查询(高级嵌套)【英文标题】:A complicated MongoDB query (a high level of nesting) 【发布时间】:2013-06-07 13:02:03 【问题描述】:

我在 Linux 下运行 MongoDB v.2.4.4-pre-。有一个包含这样元素的集合:


    num: 1,
    arr: [
        
            a: 'a1',
            b: 'b1'
        ,
        
            a: 'a2',
            b: 'b2'
        
    ]

我还有 2 个值:“numVal”和“arrVal”。 “numVal”是一个数字,“arrVal”是一个字符串数组。

任务是选择所有元素,其中 "num" == "numVal" 并且每个 "arr" 元素的 "a" 属性等于具有相同索引的 "arrVal" 元素。

例如,要获取上述元素,我需要 "numVal" = 1 和 "arrVal" = ['a1', 'a2']。

您能帮我创建一个正确的请求吗?我有一个基于“$where”选择器的解决方案,但我认为,有更好的方法。

当前查询如下所示:

db.collection.find( num: 1, $where: "this.arr.length == 2 && this.arr[0] && this.arr[0].a == 'a1' && this.arr[1] && this.arr[1].a == 'a2'" )

db.collection.find( num: 1, 'arr.a':  $all: [ 'a1', 'a2' ] , arr:  $size: 2 , $where: "this.arr[0].a == 'a1' && this.arr[1].a == 'a2'" )

项目数,由“$where”过滤,大多数情况下为 1 或 2,最大数量接近 20。

附:我无法重组我的数据库。

【问题讨论】:

【参考方案1】:

您可以成功使用下一个查询:

db.collection.find( num: 1, arr:  $size: 2 , 'arr.0.a': 'a1', 'arr.1.a': 'a2' )

【讨论】:

以上是关于一个复杂的 MongoDB 查询(高级嵌套)的主要内容,如果未能解决你的问题,请参考以下文章

mongodb高级聚合查询

Gorm 高级查询

记录MongoDB

mongodb 查询求助,嵌套数组里面查东西

MongoDB高级查询多级分组聚合及时间计算应用实践案例

Python如何高效处理复杂的嵌套字典