2016-12-20 116 views
0

我正在尝试为所有findOneAndUpdate调用更新文档。所以我使用Mongoose Middleware写了一篇帖子。我使用的猫鼬4.6从猫鼬发布更新findOneAndUpdate钩子

mySchema.post('findOneAndUpdate', function(result) { 
    result.currentEvent = result.Events.slice(-1); 
    this.model.update({}, { currentEvent: result.currentEvent }).exec(); 
}); 

但这仅更新返回的对象,而不是我的集合中的文档。有没有办法做到这一点?

回答

0

猫鼬中间件documentation状态:

查询中间件,中间件文件在不同的微妙而 重要途径:在文档中间件,这是指被更新的文档 。在查询中间件中,猫鼬不一定有 对正在更新的文档的引用,所以这是指查询 对象而不是正在更新的文档。

尝试用这种替代代码:

mySchema.post('findOneAndUpdate', function(result) { 
    result.currentEvent = result.Events.slice(-1); 
    this.save(function(err) { 
     if(!err) { 
     console.log("Document Updated"); 
     } 
    }); 
}); 

希望,它应该工作。

您也可以找到该文件,然后使用此代码保存修改后的文件:

mySchema.find({*condition*}, function(err, result) { 
result.currentEvent = result.Events.slice(-1); 
result.save(function (err) { 
     if(err) { 
     console.error('ERROR!'); 
     } 
    }); 
}); 
+0

this.save不是一个函数? – jdeyrup