Mongoose menyediakan pembungkus ringan di sekitar kerangka agregasi MongoDB. Jika Anda baru mengenal agregasi, Anda dapat mempelajari lebih lanjut tentang di dari dokumen MongoDB:http:/ /docs.mongodb.org/manual/aggregation/
Untuk menggabungkan data Anda ke dalam formulir yang telah Anda jelaskan di atas, Anda dapat menggunakan saluran agregasi dengan serangkaian operasi $group. Ini dia menggunakan kerangka luwak:
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);
});
});
$group pertama akan menghasilkan dokumen formulir ini, satu untuk setiap hari:
{
"_id" : { "year" : 2013, "month" : 8, "day" : 15 },
"count" : 1
}
$group kedua akan menghasilkan dokumen yang dikelompokkan berdasarkan bulan:
{
"_id" : { "year" : 2012, "month" : 11 },
"dailyusage" : [
{ "day" : 6, "count" : 1 },
{ "day" : 9, "count" : 1 },
... ]
},
Dan $group ketiga akan menghasilkan dokumen yang lebih besar, satu untuk setiap tahun.
Kueri ini akan menggabungkan data Anda ke dalam dokumen hierarkis yang besar. Namun, jika Anda berencana untuk menjalankan kueri pada data ini setelah agregasi, ini mungkin bukan formulir yang paling berguna untuk data Anda. Pertimbangkan bagaimana Anda akan menggunakan data teragregasi. Skema yang melibatkan lebih banyak dokumen yang lebih kecil, mungkin satu per bulan atau bahkan satu per hari, mungkin lebih nyaman.