J'ai un document avec la structure ci-dessous, et je veux obtenir un total pour les 2 derniers mois en ajoutant 2013.5 et 2013.4, dans le cadre du processus d'obtention des 10 premiers paquets.
Si j'utilise l'agrégat
db.hits.aggregate(
{$project:{"total":{"$add":["$value.2013.5", "$value.2013.4"]}}})
cette méthode renvoie une valeur numérique au total uniquement si les deux champs existent dans un document. Si l'un des champs est manquant, le total aura la valeur null. J'ai une idée de la manière dont je peux contourner ce problème. Il y a $group, $sort, $limit qui suivent $project, mais je les ai omis pour plus de clarté.
{
"_id" : "4e6eef33-d88a-4d4d-a6b2-6becf1be7e8f",
"value" : {
"package" : 4498
"2012" : {
"1" : 1.0,
"2" : 1.0,
"4" : 1.0,
"6" : 4.0,
"7" : 2.0,
"8" : 5.0,
"12" : 1.0,
"hits" : 15.0
},
"2013" : {
"1" : 6.0,
"4" : 2.0,
"hits" : 8.0
},
"hits" : 23.0
}
}
D'ailleurs, je n'utilise deux mois qu'à titre d'illustration. Normalement, j'utilise 12 mois.
Editer : Ma solution de repli est d'écrire une fonction qui ajoute les champs manquants dans le document. J'aimerais savoir s'il existe un moyen d'éviter cela.