mongoose预功能不适用于中间件删除

时间:2017-08-30 05:58:29

标签: node.js mongodb mongoose serverless-framework

我在公司删除时尝试删除mongoDb中的引用文档。但是执行后,它只删除公司而不执行中间件正文

const removedCompany = await CompanyModel.findOne({ _id: id }).remove();

内部架构文件

CompanySchema.pre('remove', (next) => {
  // 'this' is the company being removed. Provide callbacks here if you want
  // to be notified of the calls' result.
  UserCompany.remove({ companyId: this._id }).exec();
  next();
});

2 个答案:

答案 0 :(得分:0)

lambda函数实现"这"作为词汇,所以它不会起作用   使用旧式

CompanySchema.pre('remove', function(next){
 // 'this' is the company being removed. Provide callbacks here if you want
 // to be notified of the calls' result.
 UserCompany.remove({ companyId: this._id }).exec();
 next();
});

https://github.com/getify/You-Dont-Know-JS/blob/master/es6%20%26%20beyond/ch2.md#not-just-shorter-syntax-but-this

答案 1 :(得分:0)

根据the documentation

  

注意print()没有查询挂钩,仅适用于文档。如果您设置了“移除”挂钩,则会在您拨打remove()时触发,而不是在您拨打myDoc.remove()时触发。

如果您重写查询以使用findOneAndRemove,则可以为此添加中间件/挂钩。

还要考虑Shubham关于箭头函数表达式的答案。