J'ai un problème que je n'ai jamais vu auparavant avec Mongoose findByIdAndUpdate qui ne renvoie pas le modèle correct dans le rappel.
Voici le code:
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);
});
Le document original dans la base de données ressemble à ceci:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
Le updateObj entrant dans ressemble à ceci:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Le modèle renvoyé par le rappel est identique au modèle d'origine et non à updatedObj. Si j'interroge la base de données, elle a été mise à jour correctement. Ce n'est tout simplement pas renvoyé de la base de données.
Cela ressemble à une erreur "d'utilisateur stupide", mais je ne le vois pas. Toutes les idées grandement appréciées.
Dans Mongoose 4.0, la valeur par défaut de l'option new
de findByIdAndUpdate
(et findOneAndUpdate
) a été remplacée par false
(voir le n ° 2262 du notes de version ). Cela signifie que vous devez définir explicitement l'option sur true
pour obtenir la nouvelle version du document, une fois la mise à jour appliquée:
Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...