興味深い..問題は..$inおよび$or演算子が、に対して比較している配列の要素に適用されることです。 ドキュメント内の配列の要素ではなく、コレクション内の各ドキュメント。質問を要約すると、コレクション内のドキュメントのいずれかがサブセット> 渡された配列の。入力と出力を入れ替えない限り、これを行う方法を考えることはできません。つまり、最初の入力を見てみましょう。
db.test.find( {a: [1,2,3,4]} );
これを一時的なコレクションに入れることを検討してください、たとえば、temp as:
db.temp.save( {a: [1,2,3,4]} );
ここで、テストコレクション内の各ドキュメントを繰り返し処理し、$ all演算子を使用して一時的に「検索」し、完全に含まれていることを確認します。つまり、次のようにします。
foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
これは間違いなく回避策です!この仕事をすることができる他のオペレーターがいないかどうかはわかりません。