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