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

Leer datos de MongoDB Atlas - Funciones

Los ejemplos en esta página demuestran cómo utilizar la API de query de MongoDB en una Atlas Function para leer documentos de su clúster de Atlas.

Aprender sobre los métodos que puedes llamar para query datos, los operadores que te permiten guardar filtros de coincidencia expresivos y algunos patrones para combinarlos y gestionar casos de uso comunes.

Los ejemplos de esta página utilizan una colección llamada store.items que modela varios artículos disponibles para su 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 usar un code snippet en una función, primero debes crear una instancia de un handle 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 ...
}

Puedes encontrar un único documento usando el método collection.findOne().

El siguiente snippet de función encuentra un solo documento de la colección items que tiene un quantity mayor o igual a 25:

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 encuentra todos los documentos en la colección items que tienen al menos una revisión y los devuelve ordenados por name con el campo _id 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 documentos en una colección usando el método collection.count(). Puedes especificar una query para controlar qué documentos contar. Si no especificas una query, el método contará todos los documentos de la colección.

El siguiente snippet de función cuenta el número de documentos en la colección items 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 query 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 query coincide con un documento en la colección que tiene un _id valor de 5ad84b81b8b998278f773c1b:

{ "_id": BSON.ObjectId("5ad84b81b8b998278f773c1b") }

Puedes query una colección para encontrar documentos que tengan un campo con un valor de fecha específico, o query 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 del 23 de enero de 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"),
}
}

Puedes query una colección basándote en el valor de un campo de nivel raíz en cada documento. Puedes especificar un valor específico o una expresión anidada que MongoDB evalúa para cada documento.

Para más información, consulta el tutorial Query Documents en el MongoDB Server Manual.

{ "<Field Name>": <Value | Expression> }

Ejemplo

La siguiente query coincide con los documentos donde el campo name tiene un valor de Basketball:

{ "name": "Basketball" }

Puede especificar varias condiciones de query en un único documento de query. Cada campo de nivel raíz de un documento de query se asigna a un campo en la colección. MongoDB solo devuelve los documentos que cumplen todas las condiciones de la query.

Para obtener más información, vea el tutorial query en Documentos Incrustados/Anidados en el Manual de MongoDB Server.

{
"<Field Name 1>": <Value | Expression>,
"<Field Name 2>": <Value | Expression>
}

Ejemplo

La siguiente query coincide con los documentos en los que el campo name tiene un valor de Basketball y el valor de quantity es superior a cero:

{
"name": "Basketball",
"quantity": { "$gt": 0 }
}

Puedes query una colección basándote en el valor de los campos de documentos incrustados. Para especificar un campo de documento incrustado, utiliza varios expresiones de query anidadas o la notación de puntos estándar del documento.

Para obtener más información, vea el tutorial query en Documentos Incrustados/Anidados en el Manual de MongoDB Server.

Expresiones de query anidadas
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
Notación de puntos
{ "<Field Name>.<Nested Field Name>": <Value | Expression> }

Ejemplo

La siguiente query recupera documentos donde la primera revisión en el arreglo reviews fue hecha por alguien con el nombre de usuario JoeMango:

{
"reviews.0.username": "JoeMango"
}

Puedes consultar una colección en función de todos los elementos contenidos en un campo de arreglo.

Si query un campo de arreglo para un arreglo específico de valores, MongoDB devuelve documentos donde el campo de arreglo coincide exactamente con el arreglo de valores especificado. Si deseas que MongoDB devuelva documentos donde el campo de arreglo contenga todos los elementos en el arreglo de valores especificada, usa el operador $all.

Para obtener más información, consulta el Tutorial sobre query a un arreglo en el Manual del servidor de 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 query coincide con documentos donde el arreglo reviews contiene uno o más elementos que coinciden con todos los documentos especificados:

{
"reviews": {
"$all": [{ username: "JoeMango", comment: "This rocks!" }]
}
}

Puedes hacer query a una colección basadas en el valor de uno o más elementos de un campo de arreglo.

Si se consulta un campo de arreglo con una expresión de query que tiene múltiples condiciones, MongoDB devuelve documentos donde cualquier combinación de los elementos del arreglo cumple con la expresión. Si deseas que MongoDB devuelva documentos en los que un único elemento de arreglo cumpla todas las condiciones de la expresión, utiliza el operador $elemMatch.

Para obtener más información, consulta el Tutorial sobre query a un arreglo en el Manual del servidor de MongoDB.

{ "<Array Field Name>": <Value | Expression> }

Ejemplo

La siguiente consulta coincide con documentos en los que ambas condiciones de la expresión incrustada se cumplen por cualquier combinación de elementos en el arreglo reviews. Los valores especificados username y comment no necesitan estar en el mismo documento:

{
"reviews": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}

Ejemplo

La siguiente query coincide con documentos donde ambas condiciones en la expresión incrustada son cumplidas por un elemento único en el arreglo reviews. El username y el comment especificados, deben estar en el mismo documento:

{
"reviews": {
"$elemMatch": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}
}

Puedes usar un operador de comparación para comparar el valor de un campo de documento con otro valor.

{ "<Field Name>": { "<Comparison Operator>": <Comparison Value> } }

Están disponibles los siguientes operadores de comparación:

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.

Busca documentos donde el valor de un campo sea estrictamente menor que un valor especificado.

Coincide con documentos donde el valor de un campo es menor o igual que un valor especificado.

Coincide con los documentos donde el valor de un campo está incluido en un arreglo específico de valores.

Coincide con los documentos en los que el valor de un campo no está incluido en un arreglo específico de valores.

Ejemplo

La siguiente query coincide con documentos donde quantity es mayor que cero y menor o igual a diez.

{
"quantity": { "$gt": 0, "$lte": 10 }
}

Se puede usar 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 donde 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 query busca documentos en los que quantity sea mayor que cero o no haya más de cinco documentos en el arreglo reviews.

{
"$or": [
{ "quantity": { "$gt": 0 } },
{ "reviews": { "$size": { "$lte": 5 } } }
]
}

Puede usar el operador del query $regex para devolver documentos con campos que coincidan con una expresión regular. Para evitar ambigüedades con el tipo $regex EJSON, debes utilizar un objeto atlas-BSON.BSONRegExp.

{
"<Field Name>": {
"$regex": BSON.BSONRegExp(<RegEx String>, <RegEx Options>)
}
}

Ejemplo

La siguiente query coincide con documentos donde el valor name contiene la subcadena ball (insensible a mayúsculas y minúsculas).

{
"name": { "$regex": BSON.BSONRegExp(".+ball", "i") }
}