Ya, menggunakan $arrayToObject
dan $map
untuk mengonversi larik yang ada ke format yang diterimanya:
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$concatArrays": [
[{ "k": "date", "v": "$_id.date" }],
{ "$map": {
"input": "$aggr",
"in": { "k": "$$this.gender", "v": "$$this.count" }
}}
]
}
}
}}
])
Tentu saja jika ini sebenarnya hanya pada "ekor" dari agregasi yang ada dan Anda tidak memiliki setidaknya MongoDB 3.4.4 di mana operator diperkenalkan, maka Anda cukup membentuk kembali hasilnya dalam kode klien:
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 }),{}
)
)
)