關係:
- 一個
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);
}
});
});
}