删除嵌套对象引用猫鼬
remove nested object references mongoose
我的申请中有几个猫鼬模型 - 作业、提交和文件。
var assignmentSchema = new Schema({
submissions:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission'
}]
});
var submissionSchema = new Schema({
assignment: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Assignment'
},
files: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'File'
}],
})
var fileSchema = new Schema({
submission: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission'
}
})
我为作业定义了一个删除挂钩,因此当作业从我的 mongodb 中删除时,所有提交的内容也会被删除。
assignmentSchema.pre('remove', function (next) {
var assignment = this;
assignment.model('Class').update(
{_id: {$in: assignment.classes}},
{$pull: {assignments: assignment._id}},
{multi: true},
next
);
//will delete all submissions that were in the assignment
assignment.model('Submission').remove(
{_id: {$in: assignment.submissions}}).exec();
next
});
它工作正常,但我还想删除与已删除提交相关的所有文件。我怎样才能做到这一点?
您必须为提交的文件设置预删除挂钩。
然后在您的 assignmentSchema 循环中遍历 assignment.submissions 数组,找到每个分配文档并对该文档执行删除。
这是一个例子。未测试。
assignmentSchema.pre('remove', function(nextAction) {
var assignment = this;
assignment.model('Class').update({
_id: {
$in: assignment.classes
}
}, {
$pull: {
assignments: assignment._id
}
}, {
multi: true
},
next
);
Async.each(assignment.submissions, function(subId, next) {
submissionSchema.findById(subId).exec(function(err, submission) {
submission.remove();
next();
})
}, function() {
nextAction();
})
});
submissionSchema.pre('remove', function (next) {
///remove files here.
})
我的申请中有几个猫鼬模型 - 作业、提交和文件。
var assignmentSchema = new Schema({
submissions:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission'
}]
});
var submissionSchema = new Schema({
assignment: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Assignment'
},
files: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'File'
}],
})
var fileSchema = new Schema({
submission: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission'
}
})
我为作业定义了一个删除挂钩,因此当作业从我的 mongodb 中删除时,所有提交的内容也会被删除。
assignmentSchema.pre('remove', function (next) {
var assignment = this;
assignment.model('Class').update(
{_id: {$in: assignment.classes}},
{$pull: {assignments: assignment._id}},
{multi: true},
next
);
//will delete all submissions that were in the assignment
assignment.model('Submission').remove(
{_id: {$in: assignment.submissions}}).exec();
next
});
它工作正常,但我还想删除与已删除提交相关的所有文件。我怎样才能做到这一点?
您必须为提交的文件设置预删除挂钩。
然后在您的 assignmentSchema 循环中遍历 assignment.submissions 数组,找到每个分配文档并对该文档执行删除。
这是一个例子。未测试。
assignmentSchema.pre('remove', function(nextAction) {
var assignment = this;
assignment.model('Class').update({
_id: {
$in: assignment.classes
}
}, {
$pull: {
assignments: assignment._id
}
}, {
multi: true
},
next
);
Async.each(assignment.submissions, function(subId, next) {
submissionSchema.findById(subId).exec(function(err, submission) {
submission.remove();
next();
})
}, function() {
nextAction();
})
});
submissionSchema.pre('remove', function (next) {
///remove files here.
})