Mongoose poskytuje lehký obal kolem agregačního rámce MongoDB. Pokud s agregací začínáte, můžete se dozvědět více o v z MongoDB docs:http:/ /docs.mongodb.org/manual/aggregation/
Chcete-li svá data vmasírovat do formuláře, který jste popsali výše, můžete použít agregační kanál s řadou operací $group. Zde to používá rámec mongoose:
var dateSchema = mongoose.Schema({…});
var DateItem = mongoose.model('DateItem', dateSchema);
DateItem.aggregate(
{ $group : {
_id : { year: { $year : "$accessDate" }, month: { $month : "$accessDate" },day: { $dayOfMonth : "$accessDate" }},
count : { $sum : 1 }}
},
{ $group : {
_id : { year: "$_id.year", month: "$_id.month" },
dailyusage: { $push: { day: "$_id.day", count: "$count" }}}
},
{ $group : {
_id : { year: "$_id.year" },
monthlyusage: { $push: { month: "$_id.month", dailyusage: "$dailyusage" }}}
},
function (err, res)
{ if (err) ; // TODO handle error
console.log(res);
});
});
První $skupina bude mít za následek dokumenty tohoto formuláře, jeden pro každý den:
{
"_id" : { "year" : 2013, "month" : 8, "day" : 15 },
"count" : 1
}
Druhá skupina $ bude mít za následek dokumenty seskupené podle měsíce:
{
"_id" : { "year" : 2012, "month" : 11 },
"dailyusage" : [
{ "day" : 6, "count" : 1 },
{ "day" : 9, "count" : 1 },
... ]
},
A třetí skupina $ bude mít za následek ještě větší dokumenty, jeden pro každý rok.
Tento dotaz agreguje vaše data do velkých, hierarchických dokumentů. Pokud však plánujete spouštět dotazy na tato data po agregaci, nemusí to být nejužitečnější formulář pro vaše data. Zvažte, jak budete agregovaná data používat. Schéma zahrnující více menších dokumentů, třeba jeden za měsíc nebo dokonce jeden za den, by mohlo být pohodlnější.