$eq
Nesta página
$eq
Especifica a condição de igualdade. O operador
$eq
corresponde a documentos em que o valor de um campo é igual ao valor especificado.
Compatibilidade
Você pode utilizar o $eq
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 $eq
tem o seguinte formato:
{ <field>: { $eq: <value> } }
Especificar o operador $eq
é equivalente a usar o formato { field: <value> }
, exceto quando <value>
é uma expressão regular. Veja abaixo alguns exemplos.
Comportamento
Ordem de comparação
Para comparação de diferentes valores dos tipos de BSON, consulte a ordem de comparação de BSON especificada.
Combinar um valor de documento
Se o <value>
especificado for um documento, a ordem dos campos no documento será importante.
Corresponder um valor de array
Se o <value>
especificado for uma array, o MongoDB corresponderá a documentos em que <field>
corresponda exatamente à array ou <field>
contenha um elemento que corresponda exatamente à array. A ordem dos elementos é importante. Para obter um exemplo, consulte Equivale a um valor de array.
Corresponder a uma expressão regular
A expressão { field: <value> }
especifica implicitamente uma correspondência no <value>
. O MongoDB traduz a correspondência implícita para uma forma mais explícita.
Quando o <value>
é fixo, como determinada string, a expressão é equivalente a utilizar o operador $eq
{ field: { $eq: <value> } }
.
Se <value>
for uma expressão regular, a declaração será expandida utilizando o operador $regex
{ field: { $regex: <value> } }
.
Para ver exemplos que ilustram esse comportamento, consulte Comportamento de correspondência Regex.
Implicações de segurança
Sempre use o formato explícito { field: { $eq: <value> } }
com entrada fornecida pelo usuário para evitar problemas com query formadas de forma maliciosa.
Exemplos
Os exemplos a seguir comparam a collection inventory
com os seguintes documentos:
db.inventory.insertMany( [ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ] )
Equivale a um valor especificado
O exemplo a seguir faz uma query da collection inventory
para selecionar todos os documentos onde o valor do campo qty
é igual a 20
:
db.inventory.find( { qty: { $eq: 20 } } )
A query é equivalente a:
db.inventory.find( { qty: 20 } )
Ambas as queries correspondem aos seguintes documentos:
[ { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
Campo no documento incorporado é igual a um valor
O exemplo a seguir faz uma query da collection inventory
para selecionar todos os documentos onde o valor do campo name
no documento item
é igual a "ab"
. Para especificar uma condição em um campo em um documento incorporado, use a notação de ponto.
db.inventory.find( { "item.name": { $eq: "ab" } } )
A query é equivalente a:
db.inventory.find( { "item.name": "ab" } )
Ambas as queries correspondem ao seguinte documento:
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] } ]
Elemento de array equivale a um valor
O exemplo a seguir faz uma query da collection inventory
para selecionar todos os documentos onde a array tags
contém um elemento com o valor "B"
[1]:
db.inventory.find( { tags: { $eq: "B" } } )
A query é equivalente a:
db.inventory.find( { tags: "B" } )
Ambas as queries correspondem aos seguintes documentos:
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] } ]
[1] | A query também corresponderá aos documentos onde o valor do campo tags é a string "B" . |
Equivale a um valor de array
O exemplo a seguir faz uma query da collection inventory
para selecionar todos os documentos em que a array tags
é exatamente igual à array especificada ou a array tags
contém um elemento igual à array [ "A", "B" ]
.
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
A query é equivalente a:
db.inventory.find( { tags: [ "A", "B" ] } )
Ambas as queries correspondem aos seguintes documentos:
[ { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
Comportamento de correspondência Regex
Os exemplos a seguir demonstram as diferenças de comportamento entre a correspondência implícita e explícita de expressões regulares. Considere uma collection com estes documentos:
db.companies.insertMany( [ { _id: 001, company: "MongoDB" }, { _id: 002, company: "MongoDB2" } ] )
- correspondência $eq em uma string
Uma string expande para retornar os mesmos valores no caso de uma correspondência implícita ou um uso explícito do
$eq
. Ambas as queries:db.collection.find( { company: "MongoDB" }, {_id: 0 }) db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } ) retorna o seguinte resultado:
[ { company: "MongoDB" } ] - correspondência $eq em uma expressão regular
Uma query explícita utilizando
$eq
e uma expressão regular somente corresponderá a um objeto que também é uma expressão regular. A query de exemplo não retornará nada, pois os valores no campocompany
são strings.db.companies.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } ) - Correspondências de expressões regulares
Uma query com uma correspondência implícita com uma expressão regular é equivalente a fazer uma query com o operador
$regex
. Ambas as queries:db.companies.find( { company: /MongoDB/ }, {_id: 0 }) db.companies.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } ) retornam os mesmos resultados:
[ { company: "MongoDB" }, { company: "MongoDB2" } ]