Mongoose ger en lätt omslag runt MongoDB-aggregationsramverket. Om du är ny på aggregering kan du lära dig mer om i MongoDB-dokumenten:http:/ /docs.mongodb.org/manual/aggregation/
För att massera in din data i formuläret du har beskrivit ovan kan du använda en aggregeringspipeline med en serie $group-operationer. Här använder den mongoose-ramverket:
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);
});
});
Den första $gruppen kommer att resultera i dokument av denna form, ett för varje dag:
{
"_id" : { "year" : 2013, "month" : 8, "day" : 15 },
"count" : 1
}
Den andra $gruppen kommer att resultera i dokument grupperade efter månad:
{
"_id" : { "year" : 2012, "month" : 11 },
"dailyusage" : [
{ "day" : 6, "count" : 1 },
{ "day" : 9, "count" : 1 },
... ]
},
Och den tredje $gruppen kommer att resultera i ännu större dokument, ett för varje år.
Den här frågan samlar dina data till stora, hierarkiska dokument. Om du planerar att köra frågor på denna data efter aggregering kanske detta inte är den mest användbara formen för din data att vara i. Fundera över hur du kommer att använda den aggregerade informationen. Ett schema som involverar fler mindre dokument, kanske ett per månad eller till och med ett per dag, kan vara bekvämare.