Overview
La mayoría de las operaciones CRUD permiten limitar el conjunto de documentos coincidentes mediante la especificación de criterios de coincidencia en un documento de consulta. Los documentos de consulta contienen uno o más operadores de consulta que se aplican a campos específicos que determinan qué documentos se incluirán en el conjunto de resultados.
En un documento de consulta, puede hacer coincidir campos con valores literales, como
{ title: 'The Room' }, o puedes componer
Operadores de consulta para expresar criterios de coincidencia más complejos. En esta guía, abordamos las siguientes categorías de operadores de consulta en MongoDB y mostramos ejemplos de su uso:
Para seguir los ejemplos de esta guía, utilice el siguiente fragmento de código 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
Su consulta puede devolver una referencia a un cursor que contiene documentos coincidentes. Para saber cómo examinar los datos almacenados en el cursor, consulte Acceder a datos desde una página de cursor.
Consultas de valor literal
Las consultas de valor literal permiten consultar datos que coinciden exactamente con el valor proporcionado en el documento de consulta. Una consulta de valor literal consta de dos partes: un nombre de campo y un valor. Los documentos devueltos por esta consulta deben contener un campo con el mismo nombre que el proporcionado y un valor para dicho campo que coincida exactamente con el valor proporcionado. La siguiente operación utiliza una consulta literal para buscar documentos que contengan un campo llamado "nombre" con el valor "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 valor literal son equivalentes al operador de comparación $eq. Por lo tanto, las dos consultas siguientes son equivalentes:
myColl.find({ rating: { $eq: 5 } });
myColl.find({ rating: 5 });
Operadores de comparación
Los operadores de comparación permiten consultar datos basándose en comparaciones con valores de una colección. Los operadores de comparación comunes incluyen $gt para comparaciones "mayores que", $lt para comparaciones "menores que" y $ne para comparaciones "diferentes 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 }
Operadores lógicos
Los operadores lógicos permiten consultar datos mediante la lógica aplicada a los resultados de los operadores de campo. Por ejemplo, se puede usar el método $or para consultar documentos que coincidan con un operador de comparación $gt o una consulta de valor literal. La siguiente operación utiliza el operador lógico $not para buscar documentos con un valor de cantidad inferior a 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
Cuando un documento de consulta contiene varios elementos, estos se combinan con un operador lógico implícito $and para determinar qué documentos coinciden con la consulta. Como resultado, las dos consultas siguientes 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, consulte la entrada del manual de referencia Operadores de consulta de comparación.
Operadores de elementos
Los operadores de elementos permiten realizar consultas según la presencia, ausencia o tipo de 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, consulte la entrada del manual de referencia correspondiente al operador $exists.
Operadores de evaluación
Los operadores de evaluación permiten ejecutar lógica de alto nivel, como expresiones regulares y consultas de texto, al consultar documentos en una colección. Los operadores de evaluación comunes son $regex y $text. La siguiente operación utiliza el operador de evaluación $mod para buscar documentos cuyo 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, consulte la entrada del manual de referencia correspondiente al operador $mod.