Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Especifica un query

La mayoría de las operaciones CRUD permiten reducir el conjunto de documentos coincidentes especificando criterios de coincidencia en un documento de query. Los documentos de query contienen uno o más operadores del query que se aplican a campos específicos para determinar qué documentos incluir en el conjunto de resultados.

En un documento de consulta, puedes comparar los campos con valores literales, como { title: 'The Room' }, o puedes componer operadores del query para expresar criterios de coincidencia más complejos. En esta guía, cubrimos las siguientes categorías de operadores del query en MongoDB y mostramos ejemplos de cómo usarlos:

Para seguir los ejemplos de esta guía, utiliza el siguiente snippet para insertar documentos que describan frutas en la colección myDB.fruits:

const myDB = client.db("myDB");
const myColl = myDB.collection("fruits");
await myColl.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);

Nota

La operación de la query puede devolver una referencia a un cursor que contiene documentos coincidentes. Para aprender cómo examinar los datos almacenados en el cursor, consulta la página Acceso a los datos desde un cursor.

Las queries de valores literales permiten buscar datos que coincidan exactamente con el valor que especificas en el documento de query. Una query de valor literal tiene dos partes: un nombre de campo y un valor. Los documentos devueltos de tal query deben contener un campo que tenga exactamente el mismo nombre que el nombre proporcionado y un valor para ese campo que sea exactamente el mismo que el valor proporcionado. La siguiente operación utiliza una literal query para buscar documentos que contienen un campo llamado "nombre" que tiene un valor de "manzanas":

const query = { "name": "apples" };
const cursor = myColl.find(query);
for await (const doc of cursor) {
console.dir(doc);
}

Este fragmento de código devuelve los siguientes resultados:

{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 }

Nota

Las consultas de valores literales son equivalentes al operador de comparación $eq. Como resultado, las siguientes dos consultas son equivalentes:

myColl.find({
rating: { $eq: 5 }
});
myColl.find({
rating: 5
});

Los operadores de comparación permiten realizar una query de datos en función de comparaciones con valores de una colección. Los operadores de comparación comunes incluyen $gt para comparaciones de "mayor que", $lt para comparaciones de "menor que" y $ne para comparaciones de "no igual a". La siguiente operación utiliza el operador de comparación $gt para buscar documentos en los que el valor del campo qty sea mayor que 5 y los imprime:

// $gt means "greater than"
const query = { qty: { $gt : 5 } };
const cursor = myColl.find(query);
for await (const doc of cursor) {
console.dir(doc);
}

Este fragmento de código devuelve los siguientes resultados:

{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 }
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }

Los operadores lógicos le permiten query para datos utilizando lógica aplicada a los resultados de los operadores a nivel de campo. Por ejemplo, puedes usar el método $or para consultar documentos que coincidan con un operador de comparación $gt o una query de valor literal. La siguiente operación utiliza el operador lógico $not para buscar documentos con un valor de cantidad que no sea mayor que 5 y los imprime:

const query = { qty: { $not: { $gt: 5 }}};
const cursor = myColl.find(query);
for await (const doc of cursor) {
console.dir(doc);
}

Este fragmento de código devuelve los siguientes resultados:

{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 }

Nota

Cada vez que un documento de query contiene varios elementos, esos elementos se combinan con un operador lógico $and implícito para determinar qué documentos coinciden con la query. Como resultado, las siguientes dos consultas son equivalentes:

myColl.find({
rating: { $eq: 5 },
qty: { $gt: 4 }
});
myColl.find({
$and: [
{ rating: { $eq: 5 }},
{ qty: { $gt: 4 }}
]
});

Para obtener más información sobre los operadores de comparación, consulta la entrada del manual de referencia para operadores de consulta de comparación.

Los operadores de elemento te permiten consultar en función de la presencia, ausencia o tipo de un campo. La siguiente operación utiliza el operador de elemento $exists para buscar documentos que contengan el campo color:

const query = { color: { $exists: true } };
const cursor = myColl.find(query);
for await (const doc of cursor) {
console.dir(doc);
}

Este fragmento de código devuelve los siguientes resultados:

{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" }

Para obtener más información sobre este operador, véase la entrada del manual de referencia para el operador $exists.

Los operadores de evaluación permiten ejecutar lógica de nivel superior, como consultas de regex y texto, al consultar documentos en una colección. Los operadores comunes de evaluación incluyen $regex y $text. La siguiente operación utiliza el operador de evaluación $mod para buscar documentos en los que el valor del campo qty sea divisible por 3 con un resto de 0:

// $mod means "modulo" and returns the remainder after division
const query = { qty: { $mod: [ 3, 0 ] } };
const cursor = myColl.find(query);
for await (const doc of cursor) {
console.dir(doc);
}

Este fragmento de código devuelve los siguientes resultados:

{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }

Para obtener más información sobre este operador, consulta la entrada del manual de referencia para el operador $mod.