Javascript 从mongoose post findOneAndUpdate钩子更新

Javascript 从mongoose post findOneAndUpdate钩子更新,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试更新所有findOneAndUpdate调用的文档。因此,我使用Mongoose中间件编写了一个post钩子。我用的是猫鼬4.6 mySchema.post('findOneAndUpdate', function(result) { result.currentEvent = result.Events.slice(-1); this.model.update({}, { currentEvent: result.currentEvent }).exec(); });

我正在尝试更新所有findOneAndUpdate调用的文档。因此,我使用Mongoose中间件编写了一个post钩子。我用的是猫鼬4.6

mySchema.post('findOneAndUpdate', function(result) {
    result.currentEvent = result.Events.slice(-1);
    this.model.update({}, { currentEvent: result.currentEvent }).exec();
});
但这只会更新返回的对象,而不会更新集合中的文档。有办法做到这一点吗?

猫鼬中间件声明:

查询中间件与文档中间件的不同之处在于细微但复杂的区别 重要方式:在文档中间件中,这指的是文档 正在更新。在查询中间件中,mongoose不一定具有 对正在更新的文档的引用,因此它引用了查询 对象,而不是正在更新的文档

尝试用以下内容替换代码:

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

使用前钩代替后钩

POST Hook:在收集后,保存的POST Hook将被执行。
预钩子:在保存集合之前,将执行预钩子。

来自
mongoose 5.x
Node.js>=7.6.0:

mySchema.post('findOneAndUpdate', async (result) => {
  result.currentEvent = result.Events.slice(-1);
  await result,save();
});

这个.save不是一个函数吗?