Relationer:
- En
en-til-en er en relation
sådan at en stat kun har én hovedstad og en hovedstad kun er hovedstaden i én stat - En
en-til-mange er en relation
sådan at en mor har mange børn, og børnene kun har én mor - En
mange-til-mange er en relation
sådan at en bog kan skrives af flere forfattere eller medforfattere, mens en forfatter kan skrive flere bøger.
én-en-relation - Hvis et Projekt/Gruppe
er fjernet, hvordan kan jeg opdatere min Tildeling
Skema.
Typisk vil du have ét projekt
knyttet til én opgave
og tilsvarende én opgave
knyttet til ét projekt
. hvad du kan gøre her er at fjerne et projekt og derefter finde det tilhørende projekt
i opgavemodel og fjern deres referencer.
slet: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); } }); }); });}
et-mange forhold - Hvis et Projekt/Gruppe
er fjernet, hvordan kan jeg opdatere min Tildeling
Skema.
I dette scenarie fjerner vi et projekt og finder derefter alle tildelinger
som hører til dette projekt
og fjerne dens reference fra dem. Her er situationen, der kan være mange opgaver til et enkelt projekt.
slet: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( fejl); } }); }); });}
Fjern middleware
Du kan opnå det samme via middleware
som påpeget af Johnny, lige en rettelse på det..
ProjectSchema.pre('remove', function (next) { var project =this; project.model('Assignment').update( { projects:{$in:project.assignments}}, { $ pull:{ project:project._id } }, { multi:true }, next );});
Typisk kan der være mange projekter
tilhørende en opgave
og mange opgaver
tilhørende det samme projekt
. Du vil have en opgave
kolonne i dit Projekt
Skema, hvor ét projekt vil relatere til flere opgaver.
Bemærk: fjern middleware virker ikke på modeller, og det virker kun på dine dokumenter. Hvis du går med fjern
middleware sikre i din slettefunktion, finder du project
med id først og derefter på det returnerede dokument
anvend fjernmetoden, så for at ovenstående virker... vil din slettefunktion se sådan ud.
slet:function(req, res) { return Project.findById(req.params.id, function(err, project){ return project.remove(function(err){ if(!err) { console .log(nummerpåvirket); } }); }); }