В приложении nodejs, использующем Mongoose, у меня есть отношение , в котором много : в приложении много клиентов AppClients.
Модель:
const mongoose = require('mongoose')
const appSchema = new mongoose.Schema({
name: String,
appClients : [{ type: mongoose.Schema.Types.ObjectId, ref: 'AppClient' }]
})
const App = mongoose.model('App', appSchema)
module.exports = App
const appClientSchema = new mongoose.Schema({
access_key: String,
secret_key: String
})
const AppClient = mongoose.model('AppClient', appClientSchema)
Дело в том, что я хочу удалить все документы AppClients, связанные с документом приложения, когда он удаляется.
Мой текущий код:
exports.delete = async function(req, res, next) {
const app = await App.findOne({ _id: req.params['id']}).exec()
const listToDelete = [...app.appClients]
await App.deleteOne({ _id: req.params['id']}).exec()
await AppClient.remove({_id: {$in: listToDelete}}).exec()
res.redirect('/apps')
}
Это работает, но мне было интересно, как использовать крючок. Я взглянул на middleware , но не могу заставить его работать с pre ('remove'), он никогда не вызывается. Я использовал что-то вроде этого:
appSchema.pre('remove', (next) => {
console.log('pre remove') //never called
})