Si la versión de Mongo te lo permite. Para consultas complejas usar aggregation
Introducción
Conoce el potencial de Aggregation Framework usando datos reales
Casos para usar Aggregation Framework y no queries de MongoDB o map-reduce
Preparando entorno de trabajo: configurando MongoDB Atlas y la base de datos
Preparando entorno de trabajo: Docker y Mongo Compass
Operaciones básicas
Filtrando documentos con $match
Tranformando los datos con $group
Moldeamos los resultados con $project
Agregamos etapas con $count y $avg
Manipulando campos con $set
Etapas de Aggregation Framework
Trabajando con arrays y $unwind
Persistencia de datos con $out
Trabajamos y conocemos $geoNear
Consultas geoespaciales con $geoNear
Aprendemos a usar $lookup
Operaciones avanzadas
Funciones personalizadas
Evaluando expresiones con $redact
Usando funciones personalizadas con $accumulator
Agrupaciones avanzadas con $bucket y $bucketAuto
Performance y optimización
Recomendaciones para optimización y uso de recursos
Realizando profiling en MongoDB
Próximos pasos
Repaso de lo aprendido y recomendaciones
Carlos Olivera Terrazas
Aportes 7
Preguntas 2
Si la versión de Mongo te lo permite. Para consultas complejas usar aggregation
Ejemplo de la collecion “listingsAndReviews”: utilizando el metodo find:
sample_airbnb> db.listingsAndReviews.find({last_review: {$gte: new Date('2019-01-01'), $lte: new Date('2020-01-01')}}).count()
Resultado: 2263
Utilizando el framework aggregate:
sample_airbnb> db.getCollection("listingsAndReviews").aggregate([
{$match: {last_review: {$gte: new Date('2019-01-01'), $lte: new Date('2020-01-01')}}},
{$group: {_id: null, Total:{$sum: 1}}},
{$project: {_id:0}}
]);
Resultado:
[ { Total: 2263 } ]
En conclusión: para este caso es optimo utilizar las consultas comunes con el metodo find()
Map reduce esta deprecated segun la documentación de mongoDB. para más información revisar: https://docs.mongodb.com/manual/core/map-reduce.
Ejemplo del framework aggregation utilizando visual studio code en un archivo javascript (en mi caso se llama ejemploAggregation.js)
var database=db.getSiblingDB("sample_airbnb")
var coleccion=database.sales
var resultado = coleccion.find().count()
print(resultado)
var resultado = coleccion.aggregate([
{$match: {"storeLocation":"London"}},
{$group: {
_id: "$purchaseMethod",
avgAge: {$avg: "$customer.age"}
}
},
{$project:{
_id: 0,
metodo: "$_id",
mediaEdad: {$round:["$avgAge"]}
}
},
{$sort:{ "mediaEdad": 1 }}
])
print(resultado)
Ejeución a traves de la terminal de comandos:
PS D:\Usuarios\Aggregations> mongosh --quiet .\ejemploAggregation.js
#Resultado:
[
{ metodo: 'Online', mediaEdad: 43 },
{ metodo: 'Phone', mediaEdad: 44 },
{ metodo: 'In store', mediaEdad: 45 }
]
Si quieres trabajar localmente estas consultas podrás importar las colecciones con el comando:
PS D:\Usuarios\data> mongoimport --db sample_airbnb --collection accounts --file accounts.json --jsonArray
2023-09-19T01:02:22.831-0500 connected to: mongodb://localhost/
2023-09-19T01:02:23.084-0500 1746 document(s) imported successfully. 0 document(s) failed to import.
PS D:\Usuarios\data> mongoimport --db sample_airbnb --collection transactions --file transactions.json --jsonArray
2023-09-19T01:02:54.401-0500 connected to: mongodb://localhost/
2023-09-19T01:02:55.178-0500 1746 document(s) imported successfully. 0 document(s) failed to import.
PS D:\Usuarios\data> mongoimport --db sample_airbnb --collection sales --file sales.json --jsonArray
2023-09-19T01:03:15.653-0500 connected to: mongodb://localhost/
2023-09-19T01:03:16.072-0500 5000 document(s) imported successfully. 0 document(s) failed to import.
PS D:\Usuarios\data> mongoimport --db sample_airbnb --collection customers --file customers.json --jsonArray
2023-09-19T01:04:01.367-0500 connected to: mongodb://localhost/
2023-09-19T01:04:01.589-0500 500 document(s) imported successfully. 0 document(s) failed to import.
![Captura.PNG](https://static.platzi.com/media/user_upload/Captura-ef731751-d902-43e6-b252-b99de345e444.jpg)PS D:\Usuarios\data> mongoimport --db sample_airbnb --collection listingsAndReviews --file listingsAndReview.json --jsonArray
2023-09-19T01:04:49.042-0500 connected to: mongodb://localhost/
2023-09-19T01:04:50.186-0500 5555 document(s) imported successfully. 0 document(s) failed to import.
Query language:
Aggregation Framework*:
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?