Ze samotné oficiální dokumentace nebo- versus-in :
Pokud máte dokumenty jako níže:
[
{
"price": 100
},
{
"price": 200
},
{
"price": 300
},
{
"price": 400
},
{
"price": 500
}
]
Pokud jste chtěli získat dokumenty, kde price
se rovná 100
nebo 500
, dotaz jako:
db.collection.find({ price: { $in: [ 100, 500 ] } })
Tím, jak je uvedeno výše, je dotaz jednoduchý a čistý. Můžete také použít $or
místo $in
ale proč byste ztratili zkratkový zápis a snažili se, aby váš dotaz vypadal objemně tím, že budete znovu a znovu přidávat další objekty stejného pole?
Ve výchozím nastavení, pokud jste chtěli provést logické OR
na dvou různých operátorech byste použili $or
, Ale kdy použít $or
na stejném poli:
db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })
Stejně jako výše, pokud máte více různých podmínek pro shodu ve stejném poli, použijete je.
Tyto dva dotazy dávají stejný výsledek, když jsou spuštěny, ale když použijete $in
- pokud jsou vstupní hodnoty rovná čísla nebo mohou být řetězce nebo jiné typy, kde vstupní hodnoty budou přesně odpovídat hodnotám price
pole v dokumentech, ale když použijete $or
kontrolujete různé podmínky ve stejném poli.
Test: mongoplayground