Jika saya benar memahami apa yang Anda inginkan, Anda dapat mencoba ini:
db.builds.aggregate([
{ $project:
{
time: 1,
projectedData: { $ifNull: ['$data.buildResult', 'none'] }
}
},
{ $group: {
_id: {
month: { $month: "$time" },
day: { $dayOfMonth: "$time" },
year: { $year: "$time" },
buildResult: "$projectedData"
},
count: { $sum: { $cond: [ { $eq: [ "$projectedData", "none" ] }, 0, 1 ] } }
} },
{ $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1 } }
])
Pembaruan:
Anda ingin mendapatkan dari output lebih banyak dokumen yang telah di input, itu hanya mungkin dengan unwind
operator yang bekerja dengan array, tetapi Anda tidak memiliki array, jadi seperti yang saya tahu tidak mungkin untuk mendapatkan lebih banyak dokumen dalam kasus Anda. Jadi, Anda harus menambahkan beberapa logika setelah hasil kueri untuk membuat data baru untuk tanggal yang ada dengan 0 hitungan untuk jenis buildResult lainnya...