Me pregunto si hay alguna forma confiable/reutilizable de acceder al documento actualizado durante un enlace de middleware de actualización posterior a mongoose. Todo a lo que parece que tengo acceso es a:
schema.post('update', function (result) { console.log(this) // Mongoose Query, no relevant doc info console.log(result) // Mongoose CommandResult, no relevant doc info })¡Muchos gracias!
En el objeto Query que recibes en el post hook, tienes acceso a los parámetros enviados a la consulta. Puedes conseguirlo así
_conditions: { id: 'cjauvboxb0000xamdkuyb1fta' } const id = this._conditions.idesto también funciona en update/updateOne/updateMany
schema.post('update', function (documents) { this.model.find(this._conditions).then(documents => { console.log(documents.length) } })Schema.post('update') solo se usa en el manejo de errores (mensajes de error personalizados)
// The same E11000 error can occur when you call `update()` // This function **must** take 3 parameters. If you use the // `passRawResult` function, this function **must** take 4 // parameters Schema.post('update', function(error, res, next) { if (error.name === 'MongoError' && error.code === 11000) { next(new Error('There was a duplicate key error')); } else { next(error); } });Si desea agregar una marca de tiempo actualizada en cada llamada de actualización (), por ejemplo, usaría el siguiente enlace previo.
Schema.pre('update', function() { this.update({},{ $set: { updatedAt: new Date() } }); });