我有两个架构
用户架构
var UserSchema = new mongoose.Schema({
name: {
first: { type: String, trim: true, required: true },
last: { type: String, trim: true, required: true }
},
department:{type: mongoose.Schema.Types.ObjectId,ref:'Department'},
image:{ data: Buffer, contentType: String },
phone: {type:String, required: true},
email: {type: String, required: true, unique:true}
});
部门架构
var DeparmentSchema = new mongoose.Schema({
name:{ type: String, required: true },
date:{type:Date,default: Date.now},
employees:[{type: mongoose.Schema.Types.ObjectId,ref:'User'}] });
删除部门后,还应删除所有员工。我试着逐个循环和删除。但它似乎没有效率。
我可以在部门架构中使用mongoose pre或post hook删除所有员工吗?
编辑: 无法在用户架构中添加部门字段
答案 0 :(得分:0)
我认为你不需要做任何循环。
你尝试过这样的事吗?
var User = require(/* etc */);
DeparmentSchema.pre('remove', function (next) {
console.log('deleting department', this);
User.remove({
_id: { $in: this.employees } // this.employees must be an array of ObjectIds
}, function (err) {
console.log(err);
if (err) return next(err);
next();
});
});
还要确保使用.remove()
来触发挂钩。
答案 1 :(得分:0)
我使用这个预挂钩解决了这个问题
DepartmentSchema.pre('remove', function(next) {
var self=this;
this.employees.forEach(function(employee){
self.model('User').remove({ _id: employee },function (err) {
if(err){
return next(err)
}
});
});
next();
});