$and$andexecuta uma operaçãoANDlógica em uma array de uma ou mais expressões (<expression1>,<expression2>e assim por diante) e seleciona os documentos que satisfazem todas as expressões.Observação
O MongoDB fornece uma operação
ANDimplícita ao especificar uma lista de expressões separada por vírgula.
Compatibilidade
Você pode utilizar o $and 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 $and tem a seguinte sintaxe:
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
Comportamento
Ao avaliar as cláusulas na expressão $and, o otimizador de query do MongoDB considera quais índices estão disponíveis que podem ajudar a satisfazer as cláusulas da expressão $and ao selecionar o melhor plano para executar.
Para permitir que o mecanismo de consulta otimize as consultas, o $and lida com erros como segue:
Se qualquer expressão fornecida para
$andcausar um erro quando avaliada sozinha, o$andcontendo 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
$andpode causar um erro mesmo se a primeira expressão avaliar parafalse.
A maioria das linguagens de programação e drivers, incluindo o MongoDB Shell (mongosh), não permite a criação de objetos com chaves duplicadas no mesmo nível de objeto. Por exemplo:
db.inventory.find( { price: { $in: [ 7.99, 3.99 ], $in: [ 4.99, 1.99 ] } } )
A query anterior é inválida porque o nome do campo price possui operadores duplicados no mesmo nível de objeto. A query enviada ao servidor difere da intenção. Para que a query funcione, use um AND explícito:
db.inventory.find( { $and: [ { price: { $in: [ 7.99, 3.99 ] } }, { price: { $in: [ 4.99, 1.99 ] } } ] } )
A query anterior verifica explicitamente se ambas as condições são satisfeitas: a array price deve incluir pelo menos um valor de cada conjunto $in. Para mais informações, consulte Exemplos.
Exemplos
AND Queries com várias expressões especificando o mesmo campo
Considere esta query:
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
A query seleciona todos os documentos na collection inventory onde:
o valor do campo
pricenão é igual a1.99eo campo
priceexiste.
A query pode ser reescrita com uma operação AND implícita que combina as expressões do operador para o campo price:
db.inventory.find( { price: { $ne: 1.99, $exists: true } } )
AND Queries com várias expressões especificando o mesmo operador
Considere esta query:
db.inventory.find( { $and: [ { $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] }, { $or: [ { sale: true }, { price : { $lt : 5 } } ] } ] } )
A query seleciona todos os documentos onde:
o valor do campo
qtyé inferior a10ou superior a50eo valor do campo
saleé igual atrueou o valor do campopriceé menor que5.
A query não pode usar uma operação AND implícita porque usa o operador $or mais de uma vez.