Usando ganchos Mongoose, necesito que si la propiedad llamada saldo sobresaliente tiene un valor de cero, el estado cambia automáticamente a falso.
Intentar hacer esto usando el enlace PRE de Mongoose funciona, pero solo volviendo a invocar la solicitud después de que el saldo pendiente ya era cero antes. Es por eso que he decidido utilizar el gancho POST para que una vez finalizada la configuración de saldo pendiente a cero, cambie la propiedad de estado a falso.
Este es el código que uso con PRE que funciona bien pero no es realmente viable para lo que necesito:
SaleSchema.pre('findOneAndUpdate', async function() { const docToUpdate = await this.model.findOne(this.getQuery()) if (docToUpdate.outstandingBalance < 1) { this._update.status = false; } })Así que decidí cambiar PRE a POST pero nunca funciona:
SaleSchema.post('findOneAndUpdate', async function() { const docToUpdate = await this.model.findOne(this.getQuery()) if (docToUpdate.outstandingBalance < 1) { this._update.status = false; } })'POST' significa que todo está listo, no hay ninguna acción después de eso (los datos ya están actualizados), debe guardarlos nuevamente después de configurar el estado para actualizar el estado.
PRE es correcto para su caso, solo cambie la condición: Verificación de datos actualizados en lugar de datos actuales
SaleSchema.pre('findOneAndUpdate', async function() { const docToUpdate = await this.model.findOne(this.getQuery()) if (this._update.outstandingBalance < 1 || (!this._update.outstandingBalance && docToUpdate.outstandingBalance < 1)) { this._update.status = false; } })Esta fue la solución para poder establecer el estado en falso en función del valor de Saldo pendiente mediante el enlace Pre:
SaleSchema.pre('findOneAndUpdate', function (next) { if(this._update.$set.outstandingBalance < 1) { this._update.status = false } next(); });Muchas gracias a él por su ayuda ya que @hoangdv me guió para encontrar la solución.