Почему mongoose middleware «pre» remove с {query: true} не вызывается? - PullRequest
0 голосов
/ 27 февраля 2019

Я немного застрял в этой проблеме.Я прочитал всю документацию mongoose о промежуточном программном обеспечении и некоторой проблеме с переполнением стека, и не смог выяснить, как решить мою проблему без дублирования запросов (найти, а затем удалить).

Обычно предварительное промежуточное ПО при удалении не срабатывает, когдазвонок из модели, а не из документа.Но согласно документу , если я добавлю {query: true}, моя функция будет вызываться из запроса модели.

Я использую последнюю версию monngoose (5.4.16)

Вот мой код.

let mySchema= new mongoose.Schema({
  name: String,
  comment: String
}, { usePushEach: true });

mySchema.pre('remove', { document: true }, function() {
  console.log('remove document');
});
mySchema.pre('remove', { query: true }, function() {
  console.log('remove');
});
const MyModel = mongoose.model('MyModel', mySchema);

И вызов здесь

MyModel.deleteOne({ _id: modelId }, (errorRm) => {
  if (errorRm) {
    return res.json({ success: false, message: `${errorRm.message}` });
  }
    return res.json({ success: true, message: 'Model successfully removed' });
  });

Модель успешно удалена, но ничего не регистрируется в функциях "pre" ...

Любая помощь будет приветствоваться.

1 Ответ

0 голосов
/ 27 февраля 2019

Это потому, что вы используете MyModel.deleteOne () .Используйте MyModel.remove () , и оно будет работать.

В соответствии с документацией:

Вы можете передавать параметры в Schema.pre () и Schema.post () чтобы переключить, вызывает ли Mongoose ваш хук remove () для Document.remove () или Model.remove ():

...