MongoDB Преобразовать это в пары ключ-значение - PullRequest
0 голосов
/ 12 апреля 2020

Вывод моего запроса mon go после применения groupyby выглядит следующим образом:

[
  {
    "_id": "FAIL",
    "count": 2
  },
  {
    "_id": "PASS",
    "count": 3
  }
]

Как я могу преобразовать это в пары ключ-значение следующим образом:

[
  metric_count:{      
  "FAIL":2,
  "PASS":3,
  "TOTAL":5   //sum of pass count and fail count
 }
]

Детская площадка MongoDB

1 Ответ

1 голос
/ 12 апреля 2020

Агрегация 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 преобразуют массив в конечный объект.

Я надеюсь, вы найдете что-то полезное с моим газопровод .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...