以下是我的收藏中的一些记录:
{ 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]}}
]}
]})
我很惊讶没有更好的方法!
答案 0 :(得分:0)
好的,这是另一个版本(不要问我效率:))
db.ma.find({$or: [{arrayA: 2, arrayB: 6},
{arrayA: 6, arrayB: 2},
{arrayA: {$all: [2,6]}},
{arrayB: {$all: [2, 6]}}]})