node.js - Mongoose :中间件预删除选项不起作用

标签 node.js mongodb mongoose

Mongoose 的文档说:

Mongoose - Schema-pre

Schema.prototype.pre():
Parameters:
The «String|RegExp» method name or regular expression to match method name
[options] «Object»
[options.document] «Boolean» If name is a hook for both document and query middleware, set to true to run on document middleware.
[options.query] «Boolean» If name is a hook for both document and query middleware, set to true to run on query middleware.
callback «Function»

还有关于 pre hook“deleteOne”:
Mongoose - middleware

Document middleware is supported for the following document functions. In document middleware functions, this refers to the document:
...deleteOne

Query middleware is supported for the following Model and Query functions. In query middleware >functions, this refers to the query:
...deleteOne

所以,deleteOne 位于 Document 和 Query Hook 中,现在让我们尝试使用它:

mySchema.pre('deleteOne', { document: true }, function(next) {
  console.log(this)
  next()
})

结果:这是指查询,而不是文档。为什么?

最佳答案

哦,文档中并不清楚,“this”仅指文档#deleteOne中的文档。

因此,“deleteOne”钩子(Hook)的正确用法是:
在模型中:

DocSchema.pre('deleteOne', { document: true }, function(next) {
  console.log(this)
  next()
})

稍后在代码中(在 Controller 等中):

const doc = await DocModel.findOne({ name: 'myDoc' })
await doc.deleteOne()

现在“this”指的是文档🎉

关于node.js - Mongoose :中间件预删除选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006362/

相关文章:

javascript - Mongoose 文档过滤属性

node.js - 将元素插入嵌套数组 mongoose nodejs

node.js - 如何获取 node-oracledb 中过程的 dbms_output.put_line 输出

node.js - 如何将 Node --experimental-modules 与 Typescript 输出结合使用

mongodb - MongoDB 中相当简单的基于时间的队列

javascript - 遍历 MongoDB 游标很慢

Node.js/Mongoose/按顺序排序并显示

javascript - 如何使用 crypto 检查字符串是否已在 Node.js 中进行哈希处理

node.js - Nodejs 中文件的原子写入/读取

node.js - 我的数据库未在 Sequelize 中更新