如何在Mongodb中查询多个数组

时间:2012-07-04 17:54:40

标签: mongodb

以下是我的收藏中的一些记录:

{ id: 1, arrayA: [1, 2, 3], arrayB: [4, 5, 6]},
{ id: 2, arrayA: [2, 4], arrayB: [1, 5]},
{ id: 3, arrayA: [1, 6], arrayB: [2, 3, 4]},
{ id: 4, arrayA: [2, 6], arrayB: [1, 3, 4]},
{ id: 5, arrayA: [1, 4, 5], arrayB: [2, 3, 6]},
{ id: 6, arrayA: [2, 4, 5], arrayB: [2, 3]}
....

如何构造一个带有数字数组的查询(称之为inputArray),并获取包含在arrayA或arrayB中的所有数字由inputArray指定的记录。

如果inputArray是[2,6],那么查询将是:查找arrayA或arrayB中包含2和6的所有记录。

这应该返回:

id 1:因为2在arrayA中,6在arrayB中

id 3:因为2在arrayB中而6在arrayA中

id 4:因为2在arrayA中,6在arrayA中

id 5:因为2在arrayB中而6在arrayB中

这是我能想到的最好的:

db.collection.find({$or: [    
  {arrayA: {$all: [2, 6]}},
  {arrayB: {$all: [2, 6]}},
  {$and: [
    {arrayA: {$in: [2, 6]}},
    {arrayB: {$in: [2, 6]}}    
  ]}
]})

我很惊讶没有更好的方法!

1 个答案:

答案 0 :(得分:0)

好的,这是另一个版本(不要问我效率:))

db.ma.find({$or: [{arrayA: 2, arrayB: 6}, 
                  {arrayA: 6, arrayB: 2}, 
                  {arrayA: {$all: [2,6]}}, 
                  {arrayB: {$all: [2, 6]}}]})