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

2/21
Recursos
Transcripci贸n

Aportes 5

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Si la versi贸n de Mongo te lo permite. Para consultas complejas usar aggregation

Ejemplo de la collecion 鈥渓istingsAndReviews鈥: 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:

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