$eqEspecifica a condição de igualdade. O operador
$eqcorresponde 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> } }
O operador $eq é equivalente ao 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 <value> for um documento, a ordem dos campos no documento importa.
Corresponder um valor de array
Se <value> for uma array, o MongoDB corresponde 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 <value> é fixo, como determinada string, a expressão é equivalente a utilizar o operador $eq { field: { $eq: <value> } }.
Se <value> for uma expressão regular, o MongoDB expande a declaração para usar o operador $regex { field: { $regex: <value> } }.
Para obter exemplos, consulte Comportamento de correspondência de 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 usam a coleção inventory:
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
Este exemplo seleciona todos os documentos da coleção inventory em que 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 seleciona todos os documentos da coleção inventory onde o valor do campo item.name é 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 seleciona todos os documentos na coleção inventory em que 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
Este exemplo seleciona todos os documentos na coleção inventory onde o array tags é igual ao array especificado ou contém um elemento que é igual ao 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 mostram a diferença entre 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
As strings retornam os mesmos valores, seja usando uma correspondência implícita ou um uso explícito de
$eq. As consultas a seguir retornam o mesmo resultado:db.collection.find( { company: "MongoDB" }, {_id: 0 }) db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } ) O resultado é:
[ { company: "MongoDB" } ] - correspondência $eq em uma expressão regular
Uma consulta explícita que usa
$eqe uma expressão regular só corresponde a um objeto que também é uma expressão regular. A consulta de exemplo não retorna resultados porque os valores no campocompanysão cadeias de caracteres.db.companies.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } ) - Correspondências de expressões regulares
Uma consulta com correspondência implícita a uma expressão regular é equivalente a uma consulta que usa o operador
$regex. As seguintes consultas retornam o mesmo resultado:db.companies.find( { company: /MongoDB/ }, {_id: 0 }) db.companies.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } ) Os resultados são:
[ { company: "MongoDB" }, { company: "MongoDB2" } ]