关系:
- 一个
one-to-one is a relationship
这样,一个国家只有一个 省会城市和省会城市是唯一的资本一种状态
- A
one-to-many is a relationship
这样一位母亲有很多 孩子,并且孩子只有一个母亲
- A
many-to-many is a relationship
这样一本书可以由 几位作者或共同作者写,而作者可以写几本 书。
一一对应的关系 - 如果Project/Group
被删除,我如何更新我的Assignment
模式。
通常你将有一个project
映射到映射到一个project
一个assignment
,同样一个assignment
。你可以在这里做的是删除一个项目,然后在赋值模型中找到相关的project
并删除它们的引用。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: project.assignment}},
{$pull: {projects: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
一个一对多的关系 - 如果Project/Group
被删除,我如何更新我的Assignment
模式。
在这种情况下,我们将删除一个项目,然后找到属于此project
的所有assignments
并从中删除其参考。这里的情况是,对于单个项目可以有许多分配。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: {$in: project.assingments}},
{$pull: {project: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
删除中间件
你可以通过middleware
达到同样的事情,由约翰尼指出的那样,仅仅是修正上..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
通常可以有很多projects
属于到assignment
和许多assignments
属于相同的project
。您的Project
模式中将有一个assignment
列,其中一个项目将与多个分配相关。
注意:删除中间件不适用于模型,它只能在您的文档上工作。如果你打算用remove
中间件确保你的删除功能,你首先通过id找到project
,然后在返回document
上应用remove方法,所以对于上面的工作...你的删除函数看起来像这样。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}