vistas metodo funcion ejemplos ejemplo consultas complejas avg agregados mongodb aggregation-framework nosql

funcion - metodo aggregate mongodb



MongoDB: ¿cómo puedo usar múltiples grupos en una canalización de agregación? (1)

Pude encontrar una solución usando $ cond en mi operación $ group.

db.project.aggregate( { $match : { brandId : 4 } }, { $project : { _id : 0, brandId : 1, count : 1, day : 1} }, { $group : { _id : "$brand", TotalCount : { $sum : "$count" }, countInTimeRange : {$sum: { $cond: [ { $and: [{$gte: [ "$day", new Date(2014, 0, 6) ] }, {$lte: [ "$day", new Date(2014, 0, 8) ] }] }, "$count", 0 ] }} }} )

Estoy intentando realizar una agregación en una colección de documentos. Los documentos se ven así:

{name: "Sara", brandId: 1, count: 2 day:1/6/2014}//day value is ISODate {name: "Sally", brandId: 1, count: 5 day:1/7/2014} {name: "Mike", brandId: 1, count: 2, day: 1/8/2014} {name: "Bob", brandId: 1, count: 4 day: 1/8/2014} {name: "Joe", brandId: 1, count: 5 day:1/8/2014}

Lo que trato de hacer es obtener la suma total de todos los valores de ''recuento''. Luego me gustaría agrupar los documentos por un rango de fechas y obtener la suma total de la segunda agrupación. Entonces me gustaría hacer algo como esto:

db.people.aggregate( { $match : { BrandId : 4 } }, { $group : { _id : "$brandId", TotalCount : { $sum : "$count" } //get the sum of all document ''count'' }}, {$match: { ''Day'': { $gte: new Date(2014, 0, 6), $lte: new Date(2014, 0, 8)} }}, { $group : { _id : "$BrandId", countInTimeRange : { $sum : "$count" } //get the sum of ''count'' within time range }} )

Así que me gustaría obtener el recuento de todos los documentos coincidentes, luego filtrarlos por un rango de fechas y obtener la suma total de los documentos coincidentes del intervalo de fechas filtrado. es posible?

¡Gracias!