Vztahy:
one-to-one is a relationship
takový, ž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 relationship
taková, že matka má mnoho dětí a děti mají pouze jednu matkumany-to-many is a relationship
tak, ž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);
}
});
});
}