Как изменить данные в одной коллекции, чтобы другие данные, сохраненные в той же коллекции, также были изменены? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть одна схема мангуста, называемая мастерской. схема семинара

Схема сеанса вложена в схему семинара. схема сеанса

Что мне нужно сделать: когда я добавляю / вычитаю в одном сеансе, другой сеанс должен быть обновлен до точного времени.

Например: сеансA: 60 минут Сессия B: 45 минут

Когда я редактирую сессию A и меняю число с 60 на 55 минут, мне нужно, чтобы время в сеансе B автоматически обновлялось до 50 минут.

Кроме того, если у меня есть сеанс C, 5 минут от сеанса A должны делиться между сеансом B и C. редактировать маршрут сеанса

1 Ответ

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

Это зависит от того, где вы обновляете значения, сколько вы можете обновить одновременно и какова логика для 3 значений (если я уберу 10 из B, получат ли A и C по 5?).

Вы можете либо выполнить логику в маршруте, либо использовать промежуточное ПО mongoose с помощью настраиваемого поля и установщика времени:

https://mongoosejs.com/docs/middleware.html

https://mongoosejs.com/docs/2.7.x/docs/getters-setters.html

например:

Session.path("time", function(value) {
this._oldTime = this.time;
return value;
})

Workshop.pre("save", function() {
  Session.findById(this._id).populate("sessions").exec((err, workshop) => {

   // your calculation here. Compare this._oldValue in each session document of the workshop, see what changes and calculate what needs to be done to change the others sessions values, then save each.
  })
})
...