Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
$ ou
Nesta página
$or
O operador
$or
executa uma operação lógicaOR
em uma array de um ou mais<expressions>
e seleciona os documentos que satisfazem pelo menos um dos<expressions>
.
Compatibilidade
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
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão 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 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 } )
$or
e text
queries
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
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
Ao executar queries $or
com um sort()
, o MongoDB pode utilizar índices que suportam as cláusulas $or
.
$or
e índices parciais
Você pode criar índices parciais com $or
. Use partialFilterExpression
do método db.collection.createIndex() para criar um índice parcial.
$or
contra $in
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] } } )
Cláusulas $or
agrupadas
Você pode agrupar operações $or
.
Tratamento de erros
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 paratrue
.
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 ] } } ] } )