Relazioni:
- Un
one-to-one is a relationship
in modo tale che uno stato abbia una sola capitale e una capitale sia la capitale di un solo stato - Un
one-to-many is a relationship
tale che una madre ha molti figli e i bambini hanno una sola madre - Un
many-to-many is a relationship
tale che un libro può essere scritto da più autori o coautori, mentre un autore può scrivere più libri.
relazione uno-uno - Se un Project/Group
è stato rimosso, come posso aggiornare il mio Assignment
Schema.
In genere avrai un project
mappato su un assignment
e allo stesso modo un assignment
mappato su un project
. quello che puoi fare qui è rimuovere un progetto e quindi trovare il project
associato nel modello di assegnazione e rimuovere i relativi riferimenti.
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);
}
});
});
});
}
relazione uno-molti - Se un Project/Group
è stato rimosso, come posso aggiornare il mio Assignment
Schema.
In questo scenario stiamo rimuovendo un progetto e quindi troviamo tutti gli assignments
che appartiene a questo project
e rimuovendo loro il riferimento. Ecco la situazione, ci possono essere molti incarichi per un singolo progetto.
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);
}
});
});
});
}
Rimuovi il middleware
Puoi ottenere la stessa cosa tramite middleware
come sottolineato da Johnny, solo una correzione su questo..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
In genere possono esserci molti projects
appartenente a un assignment
e molti assignments
appartenenti allo stesso project
. Avrai un assignment
colonna nel tuo Project
Schema in cui un progetto sarà correlato a più incarichi.
Nota: remove middleware non funzionerà sui modelli e funzionerebbe solo sui tuoi documenti. Se stai utilizzando remove
middleware assicurati che nella tua funzione di eliminazione trovi project
prima tramite id e poi sul document
restituito applica il metodo di rimozione, quindi per far funzionare quanto sopra... la tua funzione di eliminazione sarebbe simile a questa.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}