Eu tenho um problema que não vi antes com o Mongoose findByIdAndUpdate não retornar o modelo correto no retorno de chamada.
Aqui está o 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);
});
O documento original no banco de dados tem a seguinte aparência:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
O updateObj que vai entrar se parece com este:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
O modelo retornado do retorno de chamada é idêntico ao modelo original, não o updatedObj. Se eu consultar o banco de dados, ele foi atualizado corretamente. Apenas não está sendo retornado do banco de dados.
Parece um erro de 'usuário estúpido', mas não consigo ver. Quaisquer ideias muito apreciadas.
Respostas:
No Mongoose 4.0, o valor padrão para a
new
opção defindByIdAndUpdate
(efindOneAndUpdate
) mudou parafalse
(consulte # 2262 das notas de lançamento ). Isso significa que você precisa definir explicitamente a opção paratrue
obter a nova versão do documento, após a atualização ser aplicada:fonte