Wenn ich richtig verstanden habe, was Sie wollen, könnten Sie Folgendes versuchen:
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 } }
])
Aktualisierung:
Möchtest du aus dem Output mehr Dokumente bekommen als im Input, geht das nur mit unwind
Operator, der mit Arrays arbeitet, aber Sie haben keine Arrays, daher ist es meines Wissens unmöglich, mehr Dokumente in Ihrem Fall zu erhalten. Sie sollten also nach dem Abfrageergebnis etwas Logik hinzufügen, um neue Daten für vorhandene Daten mit 0-Zählung für einen anderen Typ von buildResult zu erstellen...