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

时间:2013-06-07 13:02:03

标签: mongodb mongodb-query database nosql

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

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

我还有两个值:“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。

P.S。我无法重组我的数据库。

1 个答案:

答案 0 :(得分:1)

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

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