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