2015-05-24 52 views
45

我有一个问题,我还没有看到与Mongoose findByIdAndUpdate没有在回调中返回正确的模型。猫鼬findByIdAndUpdate不返回正确的模型

下面的代码:

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); 
    }); 

DB中的原始文件看起来是这样的:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 1' 
} 

的updateObj将在看起来像这样:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 2' 
} 

模型返回从回调函数与原始模型相同,而不是updatedObj。 如果我查询数据库,它已被正确更新。它只是不从数据库返回。

这感觉就像一个'愚蠢的用户'的错误,但我看不到它。任何想法不胜感激。

+1

这是一个真棒点。并提醒为什么我需要保持我的所有项目在版本上匹配,因为该包通过它自己的单元测试。谢谢。 – JonRed

回答

157

在猫鼬4.0,为findByIdAndUpdate(和findOneAndUpdate)的new选项的默认值已更改为false(见release notes的#2262)。这意味着你需要在选项明确设置为true获得文档的新版本,在应用此更新后:

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {... 
+3

也被'create'方法返回值的变化所吸引。干杯好友,如果可以的话,我会投票两次。 – JonRed

+3

另外,为了更新猫鼬项目的文档,我们希望它不会抓住其他任何人。 – JonRed

+1

哦,男孩谢谢你@JohnnyHK。这破坏了我。当然,我希望新的回来。可能与API更一致,但不是真正的常识......如果我更新了某些内容,我希望看到这些更改。谢谢mongoose ... – Peege151