MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

$in e $ou podem substituir um ao outro no MongoDB?


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