以下是我收藏的一些记录:
{ 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]}}
]}
]})
我只是很惊讶没有更好的方法!