Удаление каскадного стиля в Mongoose

Есть ли способ удалить всех детей родителя в Mongoose, аналогично использованию внешних ключей MySQL?

Например, в MySQL я бы назначил внешний ключ и настроил его на каскад при удалении. Таким образом, если бы я должен был удалить клиента, все приложения и связанные пользователи также были удалены.

С верхнего уровня:

  1. Удалить клиент
  2. Удалить лотереи
  3. Удалить сообщения

В лотереях и представлениях есть поле для client_id. В представлениях есть поле для sweepstakes_id и client_id.

Прямо сейчас, я использую следующий код, и я чувствую, что должен быть лучший способ.

Client.findById(req.params.client_id, function(err, client) { if (err) return next(new restify.InternalError(err)); else if (!client) return next(new restify.ResourceNotFoundError('The resource you requested could not be found.')); // find and remove all associated sweepstakes Sweepstakes.find({client_id: client._id}).remove(); // find and remove all submissions Submission.find({client_id: client._id}).remove(); client.remove(); res.send({id: req.params.client_id}); }); 

3 Solutions collect form web for “Удаление каскадного стиля в Mongoose”

Это один из основных вариантов использования промежуточного ПО Mongoose 'remove' .

 clientSchema.pre('remove', function(next) { // 'this' is the client being removed. Provide callbacks here if you want // to be notified of the calls' result. Sweepstakes.remove({client_id: this._id}).exec(); Submission.remove({client_id: this._id}).exec(); next(); }); 

Таким образом, при вызове client.remove() это промежуточное программное обеспечение автоматически вызывается для очистки зависимостей.

Если ваши ссылки хранятся иначе, скажем, у client есть массив submission_ids , то аналогичным образом, как принятый ответ, вы можете определить следующее в submissionSchema :

 submissionSchema.pre('remove', function(next) { Client.update( { submission_ids : this._id}, { $pull: { submission_ids: this._id } }, { multi: true }) //if reference exists in multiple documents .exec(); next(); }); 

который удалит идентификатор представления из ссылочных массивов клиентов по адресу submission.remove() .

Вот еще один способ, который я нашел

 submissionSchema.pre('remove', function(next) { this.model('Client').remove({ submission_ids: this._id }, next); next(); }); 
  • $ искать несколько уровней без $ unwind?
  • Как рисовать с помощью Mongoose в Node.js?
  • MongoDB, удалять объект из массива
  • Запрос после заполнения в Mongoose
  • Model.find (). ToArray () утверждает, что не имеет метода .toArray ()
  • E11000 дублирует ключевой индекс ошибки в mongodb mongoose
  • mongodb / mongoose findMany - найти все документы с идентификаторами, перечисленными в массиве
  • Выполнение запросов mongoose.js синхронно
  • Mongoose Уникальный индекс не работает!
  • MongoDB / Mongoose запрос в определенную дату?
  • Строка Node.js Mongoose.js для функции ObjectId
  • Давайте будем гением компьютера.