Как записать получить сумму массива с помощью MapReduce MongoDB?

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

Учитывая следующую схему базы данных:

 {
    '_id': 5079,
    'name': 'Lincoln County', 
    'state': 'AR',
     'population': 13024,
    'cases': [{'date': '2020-03-16', 'count': 1}, {'date': '2020-03-22', 'count': 1}, 
              {'date': '2020-03-24', 'count': 1}, {'date': '2020-03-26', 'count': 2}], 
    'deaths': [{'date': '2020-03-27', 'count': 1}, {'date': '2020-04-02', 'count': 1}, 
               {'date': '2020-05-28', 'count': 2}, {'date': '2020-05-30', 'count': 1}] 
}
  

Какая функция MongoDB MapReduce будет генерировать коллекцию общего количества случаев covid19 для каждого состояния. Сгенерируйте одну запись для каждого состояния с его 2-буквенной аббревиатурой и общим количеством случаев covid?

Комментарии:

1. Пожалуйста, предоставьте код, который вы пытались достичь результата, это позволит сообществу помочь вам лучше.

Ответ №1:

Попробуйте этот запрос:

 db.collection.aggregate([
  {
    "$project": {
      "total": {
        "$sum": {
          "$map": {
            "input": "$cases",
            "as": "c",
            "in": "$$c.count"
          }
        }
      },
      "state": 1
    }
  }
])
  

Пример здесь

Запрос используется $map для создания массива со значениями из cases.count , а затем $sum этих значений.
Кроме того, поля вывода count — это те, которые содержат $sum и состояние использования state: 1 .