Actualizar el modelo e invocar el método

votos
0

Estoy actualizando mi objeto de modelo y quiere un método que se invoca cuando se hace esto.

Yo podría potencialmente

  • findOne
  • cambiar mis propiedades
  • invocar el método en el objeto
  • save

¿Existe sin embargo una manera de cómo yo también podría lograr esto con updateo findOneAndUpdate?

Yo sé que podría, potencialmente, también utilizar un gancho pre evento de actualización, pero no he encontrado una posibilidad allí para realizar un seguimiento de lo que los campos han cambiado, ya que no quiero para desencadenar el método en cualquier actualización, pero si un campo en particular cambió.

Publicado el 27/11/2018 a las 16:55
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Creo que lo que busca es algo así como mangosta middleware o ganchos. Se puede elegir entre los siguientes ganchos:

  • pre: se invoca antes de ejecutar la función
  • mensaje: se invoca después de que se ejecuta la función
  • se registran los ganchos en su mangosta-modelo de esquema

Aquí es un ejemplo pre-gancho:

schema.pre('save', function(next) {
  const err = new Error('something went wrong');
  // If you call `next()` with an argument, that argument is assumed to be
  // an error.
  next(err);
});

schema.pre('save', function() {
  // You can also return a promise that rejects
  return new Promise((resolve, reject) => {
    reject(new Error('something went wrong'));
  });
});

schema.pre('save', function() {
  // You can also throw a synchronous error
  throw new Error('something went wrong');
});

schema.pre('save', async function() {
  await Promise.resolve();
  // You can also throw an error in an `async` function
  throw new Error('something went wrong');
});

// later...

// Changes will not be persisted to MongoDB because a pre hook errored out
myDoc.save(function(err) {
  console.log(err.message); // something went wrong
});
Respondida el 27/11/2018 a las 17:03
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more