Relaties:
- Een
one-to-one is a relationship
zodanig dat een staat slechts één hoofdstad heeft en een hoofdstad de hoofdstad is van slechts één staat - Een
one-to-many is a relationship
zodat een moeder veel kinderen heeft en de kinderen maar één moeder - Een
many-to-many is a relationship
zodat een boek door meerdere auteurs of co-auteurs kan worden geschreven, terwijl een auteur meerdere boeken kan schrijven.
een-op-een relatie - Als een Project/Group
is verwijderd, hoe kan ik mijn Assignment
updaten Schema.
Meestal heb je één project
toegewezen aan één assignment
en zo ook een assignment
toegewezen aan één project
. wat je hier kunt doen is een project verwijderen en dan het bijbehorende project
zoeken in opdrachtmodel en hun referenties verwijderen.
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);
}
});
});
});
}
een-veel-relatie - Als een Project/Group
is verwijderd, hoe kan ik mijn Assignment
updaten Schema.
In dit scenario verwijderen we een project en vinden dan alle assignments
die bij dit project
hoort en het verwijderen van de verwijzing van hen. Hier is de situatie, er kunnen veel opdrachten zijn voor een enkel project.
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 verwijderen
Je zou hetzelfde kunnen bereiken via middleware
zoals opgemerkt door Johnny, slechts een correctie daarop..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Meestal kunnen er veel projects
. zijn behorend bij een assignment
en veel assignments
behorend tot hetzelfde project
. Je krijgt een assignment
kolom in uw Project
Schema waarin één project betrekking heeft op meerdere opdrachten.
Opmerking: middleware verwijderen werkt niet op modellen en werkt alleen op uw documenten. Als je gaat met remove
middleware zorgt ervoor dat u in uw verwijderfunctie project
. vindt eerst op id en vervolgens op het geretourneerde document
pas de verwijdermethode toe, dus om het bovenstaande te laten werken... zou uw verwijderfunctie er als volgt uit zien.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}