Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$ ou

Nesta página

  • Compatibilidade
  • Sintaxe
  • Comportamentos
$or

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

Você pode utilizar o $or para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações MongoDB na nuvem

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

Ao 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 suporte de um índice. Isso ocorre porque uma query $text deve usar um índice e $or só pode usar índices se todas as suas cláusulas forem suportadas por índices. Se a query $text não puder utilizar um índice, a query retornará um erro.

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

Ao executar queries $or com um sort(), o MongoDB pode utilizar índices que suportam 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, utilize 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 ] } }
]
} )
← $nor