web-dev-qa-db-fra.com

Mongoose findByIdAndUpdate ne renvoie pas le bon modèle

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.

82
JonRed

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) {...
235
JohnnyHK