У меня есть модель пользователя и опроса. Модель опроса выглядит так:
const SurveySchema = mongoose.Schema({
title: {
type: String
},
options: [{
value: String,
votes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]
}]
})
Итак, в UserSchema я хочу выполнить каскадное удаление, когда пользователь удаляет свою учетную запись, я хочу удалить его из голосов. Итак, я попробовал что-то вроде этого:
UserSchema.pre('remove', function (next) {
this.model('Survey').update({ options: { $elemMatch: { votes: this._id } } }, { $pull: { votes: this._id } }, {multi: true}).exec();
next();
});
Я знаю, что это даже близко не к решению, но просто для того, чтобы вы могли видеть, в каком направлении я иду.
Что ж, поисковый запрос для меня работает, он находит все опросы, в которых голосовал пользователь, но пул-запрос не работает, он не извлекает его идентификатор из голосов. Можешь попробовать и протестировать?
Причина, по которой я поместил next () в следующую строку, заключается в том, что я хочу, чтобы этот запрос на обновление был асинхронным, поэтому мне не нужно ждать ответа от него, даже если я поместил next () внутрь, он все равно не т работать





Это близко, но
exec()принимает обратный вызов или обещание для разрешения, иnext()принадлежит к этому, а не просто к следующей строке. На самом деле существует лучший пример в другой ответ на принятый на дубликате, учитывая, что он фактически показывает$pullи разрешение в ответе обратного вызова.