我在 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。
PS我无法重组我的数据库。