来自Mongoose Post FindOneAndupdate Hook的更新



我正在尝试为所有FindOneAndupdate调用更新文档。因此,我使用Mongoose中间件写了一个帖子挂钩。我正在使用Mongoose 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!');
       }
    });
});

来自mongoose 5.xNode.js >= 7.6.0:

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

而不是使用后钩使用pre hook。

帖子挂钩:将执行保存后的挂钩后。前钩:保存收集之前将执行挂钩。

您可以使用findoneandupdate挂钩,之后可以使用方法result.save()

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

最新更新