Skip to content

Commit

Permalink
docs(middleware): clarify that doc.deleteOne() doesn't run query mi…
Browse files Browse the repository at this point in the history
…ddleware currently

Fix #13669
  • Loading branch information
vkarpov15 committed Aug 8, 2023
1 parent 570be58 commit 292641b
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions docs/middleware.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,14 @@ Here are the possible strings that can be passed to `pre()`
All middleware types support pre and post hooks.
How pre and post hooks work is described in more detail below.

**Note:** Mongoose registers `updateOne` and
`deleteOne` middleware on `Query#updateOne()` and `Query#deleteOne()` by default.
This means that both `doc.updateOne()` and `Model.updateOne()` trigger
`updateOne` hooks, but `this` refers to a query, not a document. To register
`updateOne` or `deleteOne` middleware as document middleware, use
`schema.pre('updateOne', { document: true, query: false })`.
**Note:** Mongoose registers `updateOne` middleware on `Query.prototype.updateOne()` by default.
This means that both `doc.updateOne()` and `Model.updateOne()` trigger `updateOne` hooks, but `this` refers to a query, not a document.
To register `updateOne` middleware as document middleware, use `schema.pre('updateOne', { document: true, query: false })`.

**Note:** Like `updateOne`, Mongoose registers `deleteOne` middleware on `Query.prototype.deleteOne` by default.
That means that `Model.deleteOne()` will trigger `deleteOne` hooks, and `this` will refer to a query.
However, `doc.deleteOne()` does **not** fire `deleteOne` query middleware for legacy reasons.
To register `deleteOne` middleware as document middleware, use `schema.pre('deleteOne', { document: true, query: false })`.

**Note:** The [`create()`](./api/model.html#model_Model-create) function fires `save()` hooks.

Expand Down

0 comments on commit 292641b

Please sign in to comment.