Relationships:
- 一个州只有一个人的
one-to-one is a relationship
美元
- 一个
one-to-many is a relationship
岁的母亲有很多
- 一本书的作者是
many-to-many is a relationship
人
一对一关系-If a 100 is removed, how can i update my 101 Schema.
通常,一个project
映射到一个assignment
,同样,一个assignment
映射到一个project
.您可以在这里删除一个项目,然后在分配模型中找到相关的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);
}
});
});
});
}
一对多的关系——If a 100 is removed, how can i update my 101 Schema.
在这个场景中,我们删除一个项目,然后找到属于这个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);
}
});
});
});
}
Remove middleware
正如约翰尼所指出的那样,你可以通过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
列,其中一个项目与多个任务相关.
Note:删除中间件不会在模型上工作,它只会在文档上工作.如果你在删除函数中使用remove
,你会先找到project
by id,然后在返回的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);
}
});
});
}