Overview
Los ejemplos de esta página demuestran cómo utilizar la API de consulta de MongoDB en una función para leer documentos de su clúster Atlas.
Conozca más sobre el métodos que puede llamar para consultar datos, los operadores que le permiten escribir filtros de coincidencia expresivos y algunos patrones para combinarlos para manejar casos de uso comunes.
Modelo de datos
Los ejemplos de esta página utilizan una colección denominada store.items Que modela varios artículos disponibles para la compra en una tienda en línea. Cada artículo tiene un name, un inventario quantity y una matriz de clientes reviews.
{ "title": "Item", "required": ["_id", "name", "quantity", "reviews"], "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "quantity": { "bsonType": "int" }, "reviews": { "bsonType": "array", "items": { "bsonType": "object", "required": ["username", "comment"], "properties": { "username": { "bsonType": "string" }, "comment": { "bsonType": "string" } } } } } }
Configuración de fragmentos
Para utilizar un fragmento de código en una función, primero debe crear una instancia de un controlador de colección de MongoDB:
exports = function() { const mongodb = context.services.get("mongodb-atlas"); const itemsCollection = mongodb.db("store").collection("items"); const purchasesCollection = mongodb.db("store").collection("purchases"); // ... paste snippet here ... }
Métodos de consulta
Buscar un solo documentofindOne() ()
Puede encontrar un solo documento utilizando el collection.findOne() método.
El siguiente fragmento de función encuentra un solo documento de la items colección que tenga un quantity mayor o igual 25 a:
const query = { "quantity": { "$gte": 25 } }; const projection = { "title": 1, "quantity": 1, } return itemsCollection.findOne(query, projection) .then(result => { if(result) { console.log(`Successfully found document: ${result}.`); } else { console.log("No document matches the provided query."); } return result; }) .catch(err => console.error(`Failed to find document: ${err}`));
Buscar uno o más documentosfind() ()
Puedes encontrar varios documentos usando el método collection.find().
El siguiente fragmento de función busca todos los documentos en la items colección que tienen al menos una revisión y los devuelve ordenados por name con el _id campo omitido:
const query = { "reviews.0": { "$exists": true } }; const projection = { "_id": 0 }; return itemsCollection.find(query, projection) .sort({ name: 1 }) .toArray() .then(items => { console.log(`Successfully found ${items.length} documents.`) items.forEach(console.log) return items }) .catch(err => console.error(`Failed to find documents: ${err}`))
Contar documentos en la colección ()count()
Puede contar los documentos de una colección con el collection.count() método. Puede especificar una consulta para controlar qué documentos contar. Si no especifica una consulta, el método cuenta todos los documentos de la colección.
El siguiente fragmento de función cuenta la cantidad de documentos en la items colección que tienen al menos una revisión:
return itemsCollection.count({ "reviews.0": { "$exists": true } }) .then(numDocs => console.log(`${numDocs} items have a review.`)) .catch(err => console.error("Failed to count documents: ", err))
query Patrones
Buscar por ID de documento
Puedes consultar una colección para encontrar un documento con un ID específico. MongoDB almacena automáticamente el ID de cada documento como un valor ObjectId en el campo _id del documento.
{ "_id": <ObjectId> }
Ejemplo
La siguiente consulta coincide con un documento de la colección que tiene un valor _id de 5ad84b81b8b998278f773c1b:
{ "_id": BSON.ObjectId("5ad84b81b8b998278f773c1b") }
Buscar por fecha
Puede consultar una colección para encontrar documentos que tengan un campo con un valor de fecha específico, o consultar documentos dentro de un rango de fechas.
{ "<Date Field Name>": <Date | Expression> }
Ejemplo
La siguiente consulta coincide con los documentos de la colección que tienen una fecha createdAt de enero 23, 2019:
{ "createdAt": new Date("2019-01-23T05:00:00.000Z") }
Ejemplo
La siguiente query coincide con documentos en la colección que tienen una fecha createdAt en algún momento del año 2019:
{ "createdAt": { "$gte": new Date("2019-01-01T00:00:00.000Z"), "$lt": new Date("2020-01-01T00:00:00.000Z"), } }
Coincidir con un campo de nivel raíz
Puede consultar una colección basándose en el valor de un campo raíz de cada documento. Puede especificar un valor específico o una expresión anidada que MongoDB evalúa para cada documento.
Para obtener más información, consulte el tutorial Consulta de documentos en el Manual del servidor MongoDB.
{ "<Field Name>": <Value | Expression> }
Ejemplo
La siguiente consulta coincide con documentos donde el campo name tiene un valor de Basketball:
{ "name": "Basketball" }
Coincidir con varios campos
Puede especificar varias condiciones de consulta en un solo documento de consulta. Cada campo raíz de un documento de consulta se asigna a un campo de la colección. MongoDB solo devuelve documentos que cumplen todas las condiciones de consulta.
Para obtener más información, consulte el tutorial Consulta en documentos anidados o incrustados en el Manual del servidor MongoDB.
{ "<Field Name 1>": <Value | Expression>, "<Field Name 2>": <Value | Expression> }
Ejemplo
La siguiente consulta coincide con documentos donde el campo name tiene un valor de Basketball y el valor quantity es mayor que cero:
{ "name": "Basketball", "quantity": { "$gt": 0 } }
Coincidir con un campo de documento incrustado
Puede consultar una colección basándose en el valor de los campos de documento incrustados. Para especificar un campo de documento incrustado, utilice varias expresiones de consulta anidadas o la notación de puntos estándar.
Para obtener más información, consulte el tutorial Consulta en documentos anidados o incrustados en el Manual del servidor MongoDB.
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
{ "<Field Name>.<Nested Field Name>": <Value | Expression> }
Ejemplo
La siguiente consulta coincide con los documentos donde la primera reseña en la matriz reviews fue dejada por alguien con el nombre de usuario JoeMango:
{ "reviews.0.username": "JoeMango" }
Coincidir con una matriz de valores
Puede consultar una colección basándose en todos los elementos contenidos en un campo de matriz.
Si consulta un campo de matriz para obtener una matriz de valores específica, MongoDB devuelve documentos donde el campo de matriz coincide exactamente con la matriz de valores especificada. Si desea que MongoDB devuelva documentos donde el campo de matriz contenga todos los elementos de la matriz de valores especificada, utilice el operador $all.
Para obtener más información, consulte el tutorial Consultar una matriz en el Manual del servidor MongoDB.
{ "<Array Field Name>": [<Value>, ...] }
Ejemplo
La siguiente query selecciona los documentos donde el arreglo reviews contiene exactamente un elemento y dicho elemento coincide con el documento especificado:
{ "reviews": [{ username: "JoeMango", comment: "This rocks!" }] }
Ejemplo
La siguiente consulta coincide con los documentos donde la matriz reviews contiene uno o más elementos que coinciden con todos los documentos especificados:
{ "reviews": { "$all": [{ username: "JoeMango", comment: "This rocks!" }] } }
Coincidir un elemento de un arreglo
Puede consultar una colección basándose en el valor de uno o más elementos en un campo de matriz.
Si consulta un campo de matriz con una expresión de consulta con varias condiciones, MongoDB devuelve documentos donde cualquier combinación de elementos de la matriz cumple la expresión. Si desea que MongoDB devuelva documentos donde un solo elemento de la matriz cumple todas las condiciones de la expresión, utilice el operador $elemMatch.
Para obtener más información, consulte el tutorial Consultar una matriz en el Manual del servidor MongoDB.
{ "<Array Field Name>": <Value | Expression> }
Ejemplo
La siguiente consulta busca documentos donde ambas condiciones de la expresión incrustada se cumplen con cualquier combinación de elementos de la reviews matriz. Los valores username y comment especificados no necesitan estar en el mismo documento:
{ "reviews": { "username": "JoeMango", "comment": "This is a great product!" } }
Ejemplo
La siguiente consulta busca documentos donde ambas condiciones de la expresión incrustada se cumplen con un solo elemento de la reviews matriz. Los elementos username y especificados comment deben estar en el mismo documento:
{ "reviews": { "$elemMatch": { "username": "JoeMango", "comment": "This is a great product!" } } }
Operadores del query
Compare Values
Puede utilizar un operador de comparación para comparar el valor de un campo de documento con otro valor.
{ "<Field Name>": { "<Comparison Operator>": <Comparison Value> } }
Los siguientes operadores de comparación están disponibles:
Operador de comparación | Descripción |
|---|---|
Coincide con documentos donde el valor de un campo es igual a un valor especificado. | |
Coincide con documentos donde el valor de un campo no es igual a un valor especificado. | |
Coincide con documentos donde el valor de un campo es estrictamente mayor que un valor especificado. | |
Coincide con los documentos en los que el valor de un campo es mayor o igual a un valor especificado. | |
Coincide con documentos donde el valor de un campo es estrictamente menor que un valor especificado. | |
Coincide con documentos donde el valor de un campo es menor o igual a un valor especificado. | |
Coincide con documentos en los que el valor de un campo está incluido en una matriz de valores especificada. | |
Coincide con documentos en los que el valor de un campo no está incluido en una matriz de valores especificada. |
Ejemplo
La siguiente consulta coincide con documentos donde quantity es mayor que cero y menor o igual a diez.
{ "quantity": { "$gt": 0, "$lte": 10 } }
Evaluar una expresión lógica
Puede utilizar un operador lógico para evaluar múltiples expresiones para un solo campo.
{ "<Field Name>": { "<Logical Operator>": [<Expression>, ...] } }
Los siguientes operadores lógicos están disponibles:
Operador lógico | Descripción |
|---|---|
Coincide con documentos donde el valor de un campo coincide con todas las expresiones especificadas. | |
Coincide con los documentos en los que el valor de un campo coincide con cualquiera de las expresiones especificadas. | |
Coincide con documentos en los que el valor de un campo no coincide con ninguna de las expresiones especificadas. | |
Invierte el resultado booleano de la expresión lógica especificada. |
Ejemplo
La siguiente consulta coincide con documentos donde quantity es mayor que cero o no hay más de cinco documentos en la matriz reviews.
{ "$or": [ { "quantity": { "$gt": 0 } }, { "reviews": { "$size": { "$lte": 5 } } } ] }
Evaluar una expresión regular
Puede utilizar el operador de consulta $regex para devolver documentos con campos que coincidan con una expresión regularPara evitar ambigüedades con el $regex tipo EJSON, debe utilizar un objeto BSON.BSONRegExp.
{ "<Field Name>": { "$regex": BSON.BSONRegExp(<RegEx String>, <RegEx Options>) } }
Ejemplo
La siguiente consulta coincide con documentos donde el valor name contiene la subcadena ball (sin distinguir entre mayúsculas y minúsculas).
{ "name": { "$regex": BSON.BSONRegExp(".+ball", "i") } }