Агрегация MongoDB обладает гибкостью при построении объектов в конвейере. Этот следующий конвейер поможет вам построить нужный объект результата.
Однако, если вы пишете программу, я предлагаю вам написать небольшую функцию преобразования массива объекта в
Сначала, чтобы найти итог, я добавляю $group
этап с _id: null
до конвейером .
[
...your stages
{
"$group": {
"_id": null,
"total": {
"$sum": "$count"
}
"stats": {
"$push": {
"k": "$_id",
"v": "$count"
}
},
}
},
}
]
не только для нахождения итогов, я также подготовил объект массива, совместимый с оператором $arrayToObject
, который поможет мне сделать конечный объект.
Затем следующие проекции исправляют ситуацию.
[
...your stages
{
"$group": {
"_id": null,
"total": {
"$sum": "$count"
},
"stats": {
"$push": {
"k": "$_id",
"v": "$count"
}
}
}
},
{
"$project": {
"_id": 0,
"metric_count": {
"$arrayToObject": {
"$concatArrays": [
"$stats",
[
{
"k": "TOTAL",
"v": "$total"
}
]
]
}
}
}
}
]
Как видите, я вложил операторов конвейера в стадию проекции для сокращения объекта результата, как мы хотим. $concatArray
concat stats и total вместе в форме единого массива, а затем $arrayToObject
преобразуют массив в конечный объект.
Я надеюсь, вы найдете что-то полезное с моим газопровод .