Dalla loro stessa documentazione ufficiale o- contro-in :
Se hai documenti come di seguito:
[
{
"price": 100
},
{
"price": 200
},
{
"price": 300
},
{
"price": 400
},
{
"price": 500
}
]
Se desideri ottenere documenti in cui price
è uguale a 100
o 500
, interroga come :
db.collection.find({ price: { $in: [ 100, 500 ] } })
Facendo come sopra, la query è semplice e pulita. Puoi anche usare $or
invece di $in
ma perché dovresti perdere la notazione abbreviata e provare a rendere la tua query ingombrante aggiungendo più oggetti dello stesso campo ancora e ancora?
Per impostazione predefinita, se si desidera eseguire OR
logico su due diversi operatori useresti $or
, Ma quando usare $or
sullo stesso campo :
db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })
Come sopra, quando hai più condizioni diverse da abbinare sullo stesso campo, lo utilizzerai.
Queste due query producono lo stesso risultato quando vengono eseguite ma quando usi $in
- se i valori di input sono numeri semplici o possono essere stringhe o altri tipi in cui i valori di input corrisponderanno esattamente ai valori di price
campo in documenti, ma quando usi $or
stai verificando condizioni diverse sullo stesso campo.
Test : mongoplayground