Da própria documentação oficial ou- versus em :
Se você tiver documentos como abaixo:
[
{
"price": 100
},
{
"price": 200
},
{
"price": 300
},
{
"price": 400
},
{
"price": 500
}
]
Se você deseja obter documentos onde
price
é igual a 100
ou 500
, consulte como:db.collection.find({ price: { $in: [ 100, 500 ] } })
Fazendo como acima, a consulta é simples e limpa. Você também pode usar
$or
em vez de $in
mas por que você perderia a notação abreviada e tentaria fazer sua consulta parecer volumosa adicionando mais objetos do mesmo campo repetidamente? Por padrão, se você quiser fazer
OR
lógico em dois operadores diferentes você usaria $or
, Mas quando usar $or
no mesmo campo:db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })
Como acima, quando você tiver várias condições diferentes para corresponder no mesmo campo, você a usará.
Essas duas consultas geram o mesmo resultado quando executadas, mas quando você usa
$in
- se os valores de entrada forem números diretos ou puderem ser strings ou outros tipos em que os valores de entrada corresponderem exatamente aos valores de price
campo em docs, mas quando você usa $or
você está verificando condições diferentes no mesmo campo. Teste: mongoplayground