$eqEspecifica la condición de igualdad. El operador
$eqcoincide con documentos donde el valor de un campo sea igual al valor especificado.
Compatibilidad
Puedes usar $eq para implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El operador $eq tiene la siguiente forma:
{ <field>: { $eq: <value> } }
Especificar el operador $eq es equivalente a usar la forma { field: <value> } salvo cuando el <value> es una expresión regular. Consulte a continuación ejemplos.
Comportamiento
Orden de comparación
Para la comparación de diferentes valores de tipo BSON, consulta el orden de comparación especificado de BSON.
Coincidir un valor de documento
Si el <value> especificado es un documento, el orden de los campos en el documento es importante.
Hacer coincidir un valor de un arreglo
Si el <value> especificado es un arreglo, MongoDB hace coincidir documentos donde el <field> coincide exactamente con el arreglo o el <field> contiene un elemento que coincide exactamente con el arreglo. El orden de los elementos es importante. Para un ejemplo, consulte Igualar un valor de arreglo.
Coincidir una expresión regular
La expresión { field: <value> } especifica implícitamente una coincidencia en <value>. MongoDB traduce la coincidencia implícita a una forma más explícita.
Cuando el <value> está fijo, como una string concreta, la expresión es equivalente a usar el operador $eq { field: { $eq: <value> } }.
Si <value> es una expresión regular, la instrucción se expande utilizando el operador $regex { field: { $regex: <value> } }.
Para ver ejemplos que ilustran este comportamiento, se debe consultar Comportamiento de coincidencia de Regex.
Implicaciones de seguridad
Utiliza siempre la forma explícita { field: { $eq: <value> } } con la entrada proporcionada por el usuario para evitar problemas con queries formadas de manera maliciosa.
Ejemplos
Los siguientes ejemplos ejecutan una query contra la colección inventory con los siguientes 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" ] } ] )
Es igual a un valor especificado
El siguiente ejemplo realiza una query a la colección inventory para seleccionar todos los documentos en los que el valor del campo qty es igual a 20:
db.inventory.find( { qty: { $eq: 20 } } )
La query es equivalente a:
db.inventory.find( { qty: 20 } )
Ambas queries coinciden con los siguientes 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" ] } ]
El campo en un documento incrustado es igual a un valor
El siguiente ejemplo consulta la colección inventory para seleccionar todos los documentos donde el valor del campo name en el documento item sea igual a "ab". Para especificar una condición en un campo de un documento incrustado, utiliza la notación de puntos.
db.inventory.find( { "item.name": { $eq: "ab" } } )
La query es equivalente a:
db.inventory.find( { "item.name": "ab" } )
Ambas queries coinciden con el siguiente documento:
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] } ]
El elemento de arreglo es igual a un valor
El siguiente ejemplo queries la colección inventory para seleccionar todos los documentos donde el arreglo tags contiene un elemento con el valor "B" [1]:
db.inventory.find( { tags: { $eq: "B" } } )
La query es equivalente a:
db.inventory.find( { tags: "B" } )
Ambas queries coinciden con los siguientes 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] | La query también coincidirá con documentos donde el valor del campo tags es la string "B". |
Es igual a un valor de arreglo
El siguiente ejemplo consulta la colección inventory para seleccionar todos los documentos donde el arreglo tags sea exactamente igual al arreglo especificado o donde el arreglo tags contenga un elemento que sea igual al arreglo [ "A", "B" ].
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
La query es equivalente a:
db.inventory.find( { tags: [ "A", "B" ] } )
Ambas queries coinciden con los siguientes 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" ] } ]
Comportamiento de coincidencia de expresiones regulares
Los siguientes ejemplos demuestran las diferencias de comportamiento entre la coincidencia implícita y explícita de expresiones regulares. Considere una colección con estos documentos:
db.companies.insertMany( [ { _id: 001, company: "MongoDB" }, { _id: 002, company: "MongoDB2" } ] )
- coincidencia de $eq en una string
Un string se expande para devolver los mismos valores, ya sea por una coincidencia implícita o un uso explícito de
$eq. Ambas de estas consultas:db.collection.find( { company: "MongoDB" }, {_id: 0 }) db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } ) devuelve el siguiente resultado:
[ { company: "MongoDB" } ] - coincidencia de $eq en una expresión regular
Una query explícita que utilice
$eqy una expresión regular solo coincidirá con un objeto que también sea una expresión regular. La query de ejemplo no devolverá nada, ya que los valores del campocompanyson cadenas de texto.db.companies.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } ) - Coincidencias de expresiones regulares
Una query con una coincidencia implícita con una expresión regular es equivalente a realizar una query con el operador
$regex. Ambas de estas consultas:db.companies.find( { company: /MongoDB/ }, {_id: 0 }) db.companies.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } ) devuelven los mismos resultados:
[ { company: "MongoDB" }, { company: "MongoDB2" } ]