Nếu tôi hiểu chính xác bạn muốn gì, bạn có thể thử cách này:
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 } }
])
Cập nhật:
Bạn muốn nhận được từ đầu ra nhiều tài liệu hơn đã được nhập vào, chỉ có thể thực hiện được với unwind
toán tử hoạt động với mảng, nhưng bạn không có bất kỳ mảng nào, vì vậy tôi biết không thể lấy thêm tài liệu trong trường hợp của bạn. Vì vậy, bạn nên thêm một số logic sau kết quả truy vấn để tạo dữ liệu mới cho các ngày hiện có với số lượng 0 cho một loại buildResult khác ...