Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$ ou

Nesta página

  • Compatibilidade
  • Sintaxe
  • Comportamentos
$or

O operador $or executa uma operação OR lógica em uma array de um ou mais <expressions> e seleciona os documentos que satisfazem pelo menos uma das <expressions>.

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

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.

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 } )

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 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.

Quando executar queries $or com um sort(), o MongoDB pode utilizar índices que aceitam as cláusulas $or.

Você pode criar índices parciais com $or. Use partialFilterExpression do método db.collection.createIndex() para criar um índice parcial.

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] } } )

Você pode agrupar operações $or.

Dica

Veja também:

Para permitir que o mecanismo de consulta otimize as consultas, o $or lida com erros como segue:

  • Se qualquer expressão fornecida para $or causar um erro quando avaliada sozinha, o $or contendo 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 $or pode 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 ] } }
]
} )

Voltar

$nor