Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

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.

Conozca 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 en esta página utilizan una colección llamada store.items que modela varios artículos disponibles para la compra en un almacenar en línea. Cada elemento tiene un name, un inventario quantity y un arreglo de reviews de clientes.

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 un function, primero debes instanciar 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 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 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 consulta coincide con 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, 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 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, 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 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"
}

Puede consultar una colección basándose en todos los elementos contenidos en un campo de matriz.

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

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

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.

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 a 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 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 usar el operador de consulta $regex para devolver documentos con campos que coincidan con una expresión regular. Para evitar ambigüedades con el $regex tipo EJSON, debe usar 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") }
}

Volver

JavaScript Support