Это зависит от того, где вы обновляете значения, сколько вы можете обновить одновременно и какова логика для 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.
})
})