Relationer:
- En
one-to-one is a relationship
så att en stat bara har en huvudstad och en huvudstad är huvudstad i endast en stat - En
one-to-many is a relationship
så att en mamma har många barn, och barnen har bara en mamma - En
many-to-many is a relationship
så att en bok kan skrivas av flera författare eller medförfattare, medan en författare kan skriva flera böcker.
en-en-relation - Om ett Project/Group
tas bort, hur kan jag uppdatera min Assignment
Schema.
Vanligtvis har du ett project
mappad till en assignment
och på liknande sätt en assignment
mappad till ett project
. vad du kan göra här är att ta bort ett projekt och sedan hitta det associerade project
i uppdragsmodellen och ta bort deras referenser.
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);
}
});
});
});
}
en-många-relation - Om ett Project/Group
tas bort, hur kan jag uppdatera min Assignment
Schema.
I det här scenariot tar vi bort ett projekt och hittar sedan alla assignments
som tillhör detta project
och tar bort dess referens från dem. Här är situationen, det kan vara många uppdrag för ett enskilt projekt.
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);
}
});
});
});
}
Ta bort mellanprogram
Du kan uppnå samma sak via middleware
som Johnny påpekade, bara en rättelse 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
);
});
Vanligtvis kan det finnas många project
som tillhör ett assignment
och många assignment
som tillhör samma project
. Du kommer att ha en assignment
kolumnen i ditt Project
Schema där ett projekt kommer att relatera till flera uppdrag.
Obs! ta bort mellanprogram fungerar inte på modeller och det fungerar bara på dina dokument. Om du går med remove
middleware säkerställ i din raderingsfunktion hittar du project
av id först och sedan på det returnerade document
använd borttagningsmetoden, så för att ovanstående ska fungera... skulle din raderingsfunktion se ut så här.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}