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
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Carlos Olivera Terrazas
Aportes 4
Preguntas 0
var db=db.getSiblingDB("sample_airbnb")
db.listingsAndReviews.aggregate([
{
$match: {
"review_scores.review_scores_rating": { $gte: 90},
}
},
{
//para guadar el acumulador en un campo
$addFields:{
amenitiesSize: {$size: "$amenities"}
}
},
{
$group: {
_id: null,
media: {
$accumulator: {
init: function(){
return {sum:0, count:0};
},
accumulateArgs:["$amenitiesSize"],
accumulate: function(state, size){
return {sum: state.sum + size, count: state.count+1};
},
// se crea una funcion para juntar documentos
merge: function(state1, state2){
return {
sum: state1.sum + state2.sum,
count: state1.count + state2.count
};
},
//finalizar
finalize: function(state){
return state.sum /state.count
},
lang:"js"
}
}
}
}
]
);
#resultado
[
{
"_id": null,
"media": 24.81186283595922
}
]
use('sample_airbnb')
db.listingAndReviews.aggregate([
{
$match: {"review_scores.review_scores_raiting": {$gt: 90}}
},
{
$addFields: {
amenitiesSize: {$size: "$amenities"}
}
},
{
$group: {
_id: null,
media: {
$accumulator: {
init: function() {
return {sum: 0, count: 0};
},
accumulateArgs: ["$amenitiesSize"],
accumulate: function(state, size){
return{sum: state.sum + size, count: state.count +1};
},
merge: function(state1, state2){
return {
sum: satet1.sum + state2.sum,
count: state1.count + state2.count,
};
},
finalize: function(state) {
return state.sum / state.count
},
lang: "js"
}
}
}
}
])
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?