Casos para usar Aggregation Framework y no queries de MongoDB o map-reduce

2/21
Recursos
Transcripción

Aportes 7

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

- **Tema:** Uso del Aggregation Framework en MongoDB. - **Cuándo usarlo:** - Para consultas simples, utiliza el estándar Query Language (find). - Para consultas complejas que involucren múltiples agrupaciones y transformaciones, elige el Aggregation Framework. - **Diferencias clave:** - **Query Language:** Más eficiente en consultas sencillas. - **Aggregation Framework:** Ideal para cálculos complejos y permite un mejor manejo de recursos. - **Alternativa:** Antes existía MapReduce, pero se recomienda el Aggregation Framework por su eficiencia y menor consumo de recursos. - **Próxima clase:** Configuración del entorno de trabajo para usar Mongo Atlas, Visual Code y Docker.
Repo del curso: <https://github.com/JimcostDev/mongodb_developer_path/tree/master/aggregation-framework>

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:

  • Para el uso de consultas simples

Aggregation Framework*:

  • Para el uso de querys donde hay que agrupar campos, realizar calculos, transformar en un solo tiempo de ejecución.