Oui, en utilisant $arrayToObject
et $map
pour convertir le tableau existant dans un format qu'il accepte :
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$concatArrays": [
[{ "k": "date", "v": "$_id.date" }],
{ "$map": {
"input": "$aggr",
"in": { "k": "$$this.gender", "v": "$$this.count" }
}}
]
}
}
}}
])
Bien sûr, si ce n'est en fait que sur la "queue" d'une agrégation existante et que vous n'avez pas au moins MongoDB 3.4.4 où l'opérateur est introduit, alors vous pouvez simplement remodeler le résultat dans le code client :
db.collection.aggregate([
// existing pipeline
]).map(d =>
Object.assign(
{ date: d._id.date },
d.aggr.reduce((acc,curr) =>
Object.assign(acc,{ [curr.gender]: curr.count }),{}
)
)
)