Z samej oficjalnej dokumentacji lub- przeciw-w :
Jeśli masz dokumenty takie jak poniżej:
[
{
"price": 100
},
{
"price": 200
},
{
"price": 300
},
{
"price": 400
},
{
"price": 500
}
]
Jeśli chcesz uzyskać dokumenty, w których price jest równe 100 lub 500 , zapytanie takie jak :
db.collection.find({ price: { $in: [ 100, 500 ] } })
Robiąc tak jak powyżej, zapytanie jest proste i czyste. Możesz także użyć $or zamiast $in ale po co tracić notację skróconą i starać się, aby zapytanie wyglądało na nieporęczne, dodając więcej obiektów tego samego pola raz za razem?
Domyślnie, jeśli chcesz wykonać logiczne OR na dwóch różnych operatorach użyjesz $or , Ale kiedy używać $or na tym samym polu :
db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })
Tak jak powyżej, gdy masz wiele różnych warunków do dopasowania na tym samym polu, użyjesz go.
Te dwa zapytania dają ten sam wynik po wykonaniu, ale gdy używasz $in - czy wartości wejściowe są liczbami prostymi lub mogą być ciągami lub innymi typami, w których wartości wejściowe będą dokładnie odpowiadać wartościom price pole w dokumentach, ale gdy używasz $or sprawdzasz różne warunki na tym samym polu.
Test: mongoplayground