<< FindOneAndUpdate() >> ó << FindOne() y Save() >>

Tengo un caso con Mongoose donde un Modelo tiene un Hook para guardar la fecha de creación y actualización. El tema es que cuando actualizo un Registro de esta manera => Model.findOneAndUpdate() no se vuelve a ejecutar el Hook del Modelo, y por lo tanto, no se ve modificada mi fecha de actualización en el registro. Tal como se menciona en:

https://www.freecodecamp.org/espanol/learn/back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save

Pero usando los métodos FindOne() y Save() puedo modificar el registro y volverlo a guardar y ahora sí se ejecuta el Hook antes de que los datos se modifiquen en la base de datos. Hacerlo de esta manera es una buena práctica? Hay alguna manera mejor?

findOneAndUpdate() no ejecuta hooks, y por lo tanto no veo por qué tendría algo mal usar findOne() y save().

Si quieres usar findOneAndUpdate(), tal vez puedes con otro hook usando el schema que sea:

schema.pre("findOneAndUpdate", async function() {
  this.set({/* cambio de fecha de actualización */});
};

Pero depende de otros factores; puedes leer más en la documentación técnica. Buena suerte!
https://mongoosejs.com/docs/middleware.html

1 Like

Nunca me dí cuenta que la cadena “save” en schema.pre(“save”, …) está indicando que se dispare con la ejecución del método .save(). Ahora todo tiene más sentido para mí jaja. Muchas gracias, buena suerte!

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.