Tengo un problema que no había visto antes con Mongoose findByIdAndUpdate que no devuelve el modelo correcto en la devolución de llamada.
Aquí está el código:
var id = args._id;
var updateObj = {updatedDate: Date.now()};
_.extend(updateObj, args);
Model.findByIdAndUpdate(id, updateObj, function(err, model) {
if (err) {
logger.error(modelString +':edit' + modelString +' - ' + err.message);
self.emit('item:failure', 'Failed to edit ' + modelString);
return;
}
self.emit('item:success', model);
});
El documento original en la base de datos se ve así:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
El updateObj que entra se ve así:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
El modelo devuelto por la devolución de llamada es idéntico al modelo original, no al updatedObj. Si consulto la base de datos, se ha actualizado correctamente. Simplemente no se devuelve de la base de datos.
Esto se siente como un error de 'usuario estúpido', pero no puedo verlo. Cualquier idea muy apreciada.
Respuestas:
En Mongoose 4.0, el valor predeterminado para la
new
opción defindByIdAndUpdate
(yfindOneAndUpdate
) ha cambiado afalse
(consulte el número 2262 de las notas de la versión ). Esto significa que debe establecer explícitamente la opción paratrue
obtener la nueva versión del documento, después de que se aplique la actualización:fuente