ObjectIdで一致していて、参照されているコレクションに実際には何もないことを認識している限り、 $ in
演算子:
db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })
もちろん、これらは実際のObjectId値です。
ただし、実際にその配列を含むドキュメントを意味する場合は、配列を渡すだけです。
db.collection.find({ "members": [ "some id 1", "some id 2" ] })
また、両方の要素が必要であるが他の要素が含まれている可能性がある場合は、現在、 $ and
式:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
]})
ただし、リリース2.6以降では、を適切に使用できます。 $ all
同じことを効果的に行うためのオペレーター:
db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })
もう1つの形式は、これら2つの要素のみを一致させますが、順序は任意です。したがって、2つのアプローチがあります。
db.collection.find({ "$or": [
{ "members": [ "some id 1", "some id 2" ] },
{ "members": [ "some id 2", "some id 1" ] }
]})
これは、論理的な $ or
を使用します。
配列は正確でなければなりませんが、どちらの方法でも配置できます。そして他のアプローチ:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
{ "members": { "$size": 2 } }
]})
したがって、これは $ size
を使用します。
配列に一致する両方の要素が含まれている場合、それも2つしかないことを確認するため 要素。これは、 $or<を使用するよりも優れた構文です。 / code>
、特に大規模なアレイの場合。
そして、前述のように将来のリリースでは、これはさらにクリーンになります:
db.collection.find({ "$and": [
{ "members": { "$all": [ "some id 1", "some id 2" ] } },
{ "members": { "$size": 2 } }
]})
それはほとんどすべての解釈をカバーしています