Сумма столбца внутри массива в Mongodb - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в MongoDB и пытаюсь найти сумму device_status из массива device_execution для данного серийного номера. Например, серийный номер ELMESR0719PXN6 имеет два состояния устройства соответственно 200 и 400 в указанное время. После каждых 5 минут состояние устройства сохраняется идет, и мы храним его. Итак, мы хотим добавить сумму статуса 200 или 400 на серийный номер. Ниже приведен документ, который содержит все детали:

Вывод должен быть, как показано ниже:

Serial number     Device_status     Sum
ELMESR0719PXN6    200               5
                  400               5
{
        "_id" : ObjectId("5e57b3376c8b9aabd5312840"),
        "ve_serial_number" : "ELMESR0719PXN6",
        "ve_type" : "eVE",
        "start_ts" : "2020-02-19T00:00:00.000+00:00",
        "end_ts" : "2020-02-19T23:59:59.999+00:00",
        "device_execution" : [
                {
                        "execution_time" : "2020-02-19T00:00:00.000+00:00",
                        "device_status" : {
                                "200" : 4,
                                "400" : 2
                        }
                },
                {
                        "execution_time" : "2020-02-19T00:02:00.000+00:00",
                        "device_status" : {
                                "200" : 1,
                                "400" : 3
                        }
                }
        ]
}

Не могли бы вы помочь мне в поиске решения? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Этот результат дает желаемый результат:

db.collection.aggregate([
   { $unwind: "$device_execution" },
   {
      $group: {
         _id: "$ve_serial_number",
         "400": { $sum: "$device_execution.device_status.400" },
         "200": { $sum: "$device_execution.device_status.200" }
      }
   }
])

Результат:

{ 
    "_id" : "ELMESR0719PXN6", 
    "200" : 5.0, 
    "400" : 5.0
}

Формат не является окончательным, я оставляю это на ваше усмотрение.

0 голосов
/ 27 февраля 2020

Я думаю, что вы можете достичь этого, используя $unwind агрегирование оператор для поля "device_execution"

Тогда вы можете просто $group их по "ve_serial_number" и "device_status" и суммировать их.

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