ここに私のコレクションのいくつかのレコードがあります:
{ 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 と呼びます) を受け取り、inputArray で指定されたすべての数値を arrayA または arrayB に含むレコードをフェッチするクエリを作成するにはどうすればよいですか。
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]}}
]}
]})
他に良い方法がないことに驚いています。