【问题标题】:Pre remove hook - Mongoose预拆钩 - Mongoose
【发布时间】:2021-04-19 12:35:50
【问题描述】:

现在我有一个项目,当我删除该项目时,它会触发 pre 'remove' 钩子来删除一个选项组。

item.remove();
itemSchema.pre('remove', async () => {
  await OptionGroup.find({ _id: { $in: this.optionGroups } })
    .remove()
    .exec();
});

选项组有一个 pre 'remove' 挂钩,用于删除选项组引用的选项。

optionGroupSchema.pre('remove', async () => {
  await Item.updateMany(
    { optionGroups: this._id },
    { $pull: { optionGroups: this._id } }
  ).exec();
  await Option.find({ _id: { $in: this.options } })
    .remove()
    .exec();
});

我预计会出现瀑布效应,但实际上只删除了选项组。还有其他一些我不明白的注意事项,例如使用 find 删除很好,但我不能像这样直接使用 remove 或 deleteMany:

itemSchema.pre('remove', async () => {
  await OptionGroup.remove({ _id: { $in: this.optionGroups } })
    .exec();
});

我从文档中知道,我只能在删除文档时触发 pre 'remove' 钩子,但是在钩子中,为什么我不能使用 remove 来触发其他 pre 'remove' 钩子?

所以我想我要理解,我需要知道:

  1. 如何触发瀑布效应,其中一个删除(文档)将触发其他文件的删除?
  2. 何时使用 deleteMany 与 remove?
  3. deleteOne 或 deleteMany 会触发 pre 'remove' 挂钩吗?

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    deleteOne 或 deleteMany 会触发 pre 'remove' 挂钩吗?

    它不会触发remove hook,你需要使用这个语法来代替。

    schema.post(/Many$/, function(res) {
      console.log('this fired after you ran `updateMany()` or `deleteMany()`);
    });
    

    【讨论】:

      猜你喜欢
      • 2023-02-18
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2020-05-13
      • 2018-01-14
      • 2016-06-07
      • 1970-01-01
      相关资源
      最近更新 更多