Vztahy:
one-to-one is a relationshiptakový, že stát má pouze jedno hlavní město a hlavní město je hlavním městem pouze jednoho státuone-to-many is a relationshiptaková, že matka má mnoho dětí a děti mají pouze jednu matkumany-to-many is a relationshiptak, že knihu může napsat několik autorů nebo spoluautorů, zatímco autor může napsat několik knih.
vztah jeden – Pokud jde o Project/Group je odstraněn, jak mohu aktualizovat své Assignment Schéma.
Obvykle budete mít jeden project mapováno na jedno assignment a podobně jedno assignment mapováno na jeden project . co zde můžete udělat, je odstranit projekt a poté najít přidružený project v modelu přiřazení a odstraňte jejich reference.
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);
}
});
});
});
}
vztah one-many – Pokud jde o Project/Group je odstraněn, jak mohu aktualizovat své Assignment Schéma.
V tomto scénáři odstraňujeme projekt a pak hledáme všechna assignments který patří k tomuto project a odstranit z nich jeho odkaz. Zde je situace taková, že pro jeden projekt může být mnoho úkolů.
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);
}
});
});
});
}
Odstraňte middleware
Totéž můžete dosáhnout pomocí middleware jak poukázal Johnny, jen oprava..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Obvykle může existovat mnoho projects patřící k assignment a mnoho assignments patřící ke stejnému project . Budete mít assignment ve vašem Project Schéma, kde se jeden projekt bude týkat více úkolů.
Poznámka: remove middleware nebude fungovat na modelech a bude fungovat pouze na vašich dokumentech. Pokud se chystáte pomocí remove middleware zajistí, že ve funkci mazání najdete project nejprve pomocí id a poté na vráceném document použijte metodu remove, takže aby výše uvedené fungovalo... vaše funkce odstranění by vypadala takto.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}