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!