Si j'ai bien compris ce que vous voulez, vous pouvez essayer ceci :
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 } }
])
Mise à jour :
Vous souhaitez obtenir de la sortie plus de documents qui étaient en entrée, cela n'est possible qu'avec unwind
opérateur qui fonctionne avec des tableaux, mais vous n'avez pas de tableaux, donc je sais qu'il est impossible d'obtenir plus de documents dans votre cas. Vous devez donc ajouter une logique après le résultat de la requête pour créer de nouvelles données pour les dates existantes avec un nombre de 0 pour un autre type de buildResult...