Как добавить сводный верхний / нижний колонтитул набора данных в тот же запрос, используя Mongodb - PullRequest
1 голос
/ 13 января 2020

Пусть следующий набор данных (_id опущен для ясности)

{ "model":"Nissan", "regId": 1230, "status": "active", "regCost" :100},
{ "model":"Nissan", "regId": 1231, "status": "active", "regCost" :100 },
{ "model":"Nissan", "regId": 1232, "status": "inactive", "regCost" :0},
{ "model":"Honda", "regId": 1233, "status": "active", "regCost" :90},
{ "model":"Honda", "regId": 1234, "status": "active", "regCost" :90},
{ "model":"Toyota", "regId": 1235, "status": "active", "regCost" :80}

Выполнение следующего запроса в пн go

[
{
    "$group": {

        "_id": "$model",
        "TotalActive": {
            "$sum": {
                "$cond": {
                    "if": {
                        "$eq": ["$status", "active"]
                    },
                    "then": 1,
                    "else": 0
                }
            }
        },
                "TotalCost" : {"$sum" : "$regCost"}
    }
}
]

даст этот результат выше:

enter image description here

Вопрос в том, как я могу изменить свой запрос, чтобы добавить итоговую строку, например:

enter image description here

1 Ответ

1 голос
/ 13 января 2020

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$group": {
    "_id": "$model",
    "TotalActive": {
      "$sum": {
        "$cond": {
          "if": {
            "$eq": ["$status", "active"]
          },
          "then": 1,
          "else": 0
        }
      }
    },
    "TotalCost": { "$sum": "$regCost" }
  }},
  { "$facet": {
    "total": [
      { "$group": {
        "_id": "Total",
        "TotalActive": { "$sum": "$TotalActive" },
        "TotalCost": { "$sum": "$TotalCost" }
      }}
    ],
    "data": [{ "$match": {} }]
  }},
  { "$project": {
    "data": {
      "$concatArrays": ["$data", "$total"]
    }
  }},
  { "$unwind": "$data" },
  { "$replaceRoot": { "newRoot": "$data" } }
])

MongoPlayground

...