- $or
- O operador - $orexecuta uma operação lógica- ORem uma array de uma ou mais- <expressions>e seleciona os documentos que satisfazem pelo menos uma das- <expressions>.
Compatibilidade
Você pode utilizar o $or para implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem 
- MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB 
- MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB 
Sintaxe
O operador $or tem a seguinte sintaxe:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 
Considere o seguinte exemplo:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ) 
Esta query selecionará todos os documentos na collection inventory onde o valor do campo quantity é menor que 20 ou o valor do campo price é igual a 10.
Comportamentos
$or Cláusulas e índices
Ao avaliar as cláusulas na expressão $or, o MongoDB executa uma verificação de collection ou, se todas as cláusulas forem suportadas por índices, o MongoDB executa verificações de índice. Em outras palavras, para que o MongoDB utilize índices para avaliar uma expressão $or, todas as cláusulas na expressão $or devem ser suportadas por índices. Caso contrário, o MongoDB realizará uma verificação da coleção.
Quando utilizar índices com queries $or, cada cláusula de um $or pode utilizar seu próprio índice. Considere a seguinte query:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ) 
Para suportar esta query, ao invés de um índice composto, você criaria um índice em quantity e outro índice em price:
db.inventory.createIndex( { quantity: 1 } ) db.inventory.createIndex( { price: 1 } ) 
O MongoDB pode usar todos, exceto o índice geoHaystack , para suportar cláusulas $or .
$or e queries de text
Se $or incluir uma query $text, todas as cláusulas na array $or deverão ter respaldo de um índice. Isso ocorre porque uma query $text deve usar um índice, e $or só pode usar índices se todas as suas sentenças forem suportadas por índices. Se a query $text não puder utilizar um índice, a query retornará um erro.
Observação
$text fornece recursos de query de texto para implantações autogerenciadas (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de query de texto completo, Atlas Search.
$or e queries geoespaciais
$or suporta cláusulas geoespaciais com a seguinte exceção para a cláusula de proximidade (a cláusula de proximidade inclui $nearSphere e $near). $or não pode conter uma cláusula de proximidade com qualquer outra cláusula.
$or e operações de ordenação
Quando executar queries $or com um sort(), o MongoDB pode utilizar índices que aceitam as cláusulas $or.
$or contra $in
Ao utilizar $or com <expressions> que são verificações de igualdade para o valor do mesmo campo, use o operador $in em vez do operador $or.
Por exemplo, para selecionar todos os documentos na collection inventory onde o valor do campo quantity é igual a 20 ou 50, use o operador $in:
db.inventory.find ( { quantity: { $in: [20, 50] } } ) 
Cláusulas $or agrupadas
Você pode agrupar operações $or.
Error Handling
Para permitir que o mecanismo de consulta otimize as consultas, o $or lida com erros como segue:
- Se qualquer expressão fornecida para - $orcausar um erro quando avaliada sozinha, o- $orcontendo a expressão pode causar um erro, mas um erro não é garantido.
- Uma expressão fornecida após a primeira expressão fornecida para - $orpode causar um erro mesmo se a primeira expressão avaliar para- true.
Por exemplo, a seguinte consulta sempre produz um erro se $x for 0:
db.example.find( {    $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ) 
A consulta a seguir, que contém várias expressões fornecidas para $or, pode gerar um erro se houver algum documento em que $x seja 0:
db.example.find( {    $or: [       { x: { $eq: 0 } },       { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }    ] } )