Pokud si uvědomíte, že se shodujete s ObjectId a ne s ničím v odkazované kolekci, můžete použít $in
operátor:
db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })
Kde jsou samozřejmě vaše skutečné hodnoty ObjectId.
Ale pokud opravdu myslíte dokument, který má přesně toto pole, pak pole prostě předáte:
db.collection.find({ "members": [ "some id 1", "some id 2" ] })
A pokud musí mít oba prvky, ale může mít i další, pak v současné době musíte použít $and
výraz:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
]})
Ale od verze 2.6 a dále můžete správně používat $all
operátora, aby efektivně udělal totéž:
db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })
Druhá forma odpovídá pouze těmto dvěma prvkům, ale v libovolném pořadí. Existují tedy dva přístupy:
db.collection.find({ "$or": [
{ "members": [ "some id 1", "some id 2" ] },
{ "members": [ "some id 2", "some id 1" ] }
]})
Toto používá logický $or
říci, že pole musí být přesné, ale může být uspořádáno oběma způsoby. A druhý přístup:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
{ "members": { "$size": 2 } }
]})
Toto by tedy použilo $size
abychom se ujistili, že když pole obsahovalo oba prvky, které se shodovaly, mělo také pouze dva Prvky. Což je hezčí syntaxe než použití $or
, zejména pro větší pole.
A v budoucích vydáních, jak bylo zmíněno, to bude ještě čistší:
db.collection.find({ "$and": [
{ "members": { "$all": [ "some id 1", "some id 2" ] } },
{ "members": { "$size": 2 } }
]})
To do značné míry pokrývá každou interpretaci