#node.js #mongodb #mongoose #mongoose-schema
Вопрос:
У меня есть схема мангуста, которая отслеживает 5 типов несчастных случаев каждый год . Теперь мне также нужен столбец «Общее количество несчастных случаев», который должен просто суммировать значения этих 5 столбцов и обновляться каждый раз, когда обновляется любой из 5 столбцов . Может кто-нибудь, пожалуйста, сказать мне, как это сделать ?
Комментарии:
1. Можете ли вы добавить пример своей коллекции?
2. На самом деле набор данных, над которым я работаю, довольно большой . Это для веб-сайта, который отслеживает количество несчастных случаев в той или иной области и группирует данные примерно в 21 различных листах Excel . Моя работа состоит в том, чтобы создать веб-сайт, чтобы можно было избежать листов excel . Коллекция выглядит примерно так : { год : 2020(скажем) , лист1 : { Смертельные случаи : 12, Незначительные несчастные случаи : 23, Смертельные случаи : 10 и т. Д. } Здесь еще 20 листов } И для каждого листа у меня есть общее поле несчастных случаев . Есть ли функция , с помощью которой я могу отслеживать общую сумму, возможно, что-то вроде $sum ?
3. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Ну, единственный способ сделать это-вручную обновлять его каждый раз, когда вы что-то делаете с этими 5 полями (у нас нет столбцов в MongoDB). 🙂
Если вы используете такие инструменты, как MongoDB, вы можете добавить какой pre
-нибудь крючок для сохранения, который сделает эту магию.
Комментарии:
1. Разве нет функции, которая может суммировать значения 5 полей (новичок ;-;) .
2. Для этого вам нужно использовать агрегацию.
3.
const yearSchema = new mongoose.Schema({ year: Number, sheet1: { f_jan_acc: Number, gi_jan_acc: Number, mi_jan_acc: Number, ni_jan_acc: Number, tot_jan_acc: Number,} })
Вот что такое краткое описание схемы . Не могли бы вы рассказать мне, пожалуйста, как применить агрегатную функцию, чтобы получить итоговую сумму всех остальных записей ??4. docs.mongodb.com/manual/aggregation
5. Большое спасибо 🙂