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