Docs Menu
Docs Home
/ /
Consulta de MongoDB Atlas

Leer datos de MongoDB Atlas - Funciones

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.

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.

El esquema JSON para store.items
{
"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" }
}
}
}
}
}

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 ...
}

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}`));

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}`))

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))

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") }

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"),
}
}

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" }

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 }
}

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.

Expresiones de consulta anidadas
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
Notación de puntos
{ "<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"
}

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!" }]
}
}

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!"
}
}
}

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 }
}

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 } } }
]
}

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") }
}

Volver

Consulta de MongoDB Atlas