J'ai un problème que je n'ai jamais vu auparavant avec le FindByIdAndUpdate de Mongoose qui ne renvoie pas le bon modèle 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 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, pas à updatedObj. Si j'interroge la base de données, elle a été mise à jour correctement. Il n'est tout simplement pas renvoyé de la base de données.
Cela ressemble à une erreur "utilisateur stupide", mais je ne peux pas le voir. Toutes les idées sont grandement appréciées.
Réponses:
Dans Mongoose 4.0, la valeur par défaut de l'
new
option defindByIdAndUpdate
(etfindOneAndUpdate
) est devenuefalse
(voir # 2262 des notes de publication ). Cela signifie que vous devez définir explicitement l'option surtrue
pour obtenir la nouvelle version du document, une fois la mise à jour appliquée:la source