Как написать агрегатную функцию mon go для следующего условия - PullRequest
1 голос
/ 15 февраля 2020

У меня есть коллекция в пн go, которая состоит из приблизительно полумиллиона документов, и из этого я хочу получить сумму определенного поля c с указанными c идентификаторами.

Например:

один документ имеет поле meter_id и общую мощность. Поэтому я хочу разделить документы с одинаковыми идентификаторами счетчиков, а затем рассчитать общую мощность для каждой коллекции с одинаковыми идентификаторами счетчиков.

пример документа:

_id:5e444fc1c5e86c84d1044aeb
meter_id:"jhk"
date:2017-06-17T18:39:28.795+00:00
activePower:Object
unit:"kwh"
Active Power L1:"0"
Active Power L2:"0"
Active Power L3:"0"
Total Active Power:"5"
reactivePower:Object
apparentPower:Object
frequency:Object
thd:Object

теперь мне нужно сгруппировать идентификаторы счетчиков и хотите получить общее суммарное поле активной мощности, которое является ключевым значением для объекта активной мощности

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

{ _id: 'jhk', total: 69236, totalAmount:  }

1 Ответ

1 голос
/ 16 февраля 2020

Попробуйте:

Запрос:

db.collection.aggregate([{$group :{_id : '$meter_id', total : {$sum : { $toInt : '$activePower.TotalActivePower'}}}}])

Тест: MongoDB-Playground

Примечание: Похоже, что ваше поле $activePower.TotalActivePower является строкой, если это так, нам нужно использовать $toInt, чтобы преобразовать его в число, чтобы вычислить сумму по всем документам, соответствующим _id критерий.

...