Relations :
- Un
one-to-one is a relationship
tel qu'un état n'a qu'une seule capitale et qu'une capitale est la capitale d'un seul état - Un
one-to-many is a relationship
telle qu'une mère a beaucoup d'enfants, et les enfants n'ont qu'une seule mère - Une
many-to-many is a relationship
tel qu'un livre peut être écrit par plusieurs auteurs ou co-auteurs, alors qu'un auteur peut écrire plusieurs livres.
relation un-un - Si un Project/Group
est supprimé, comment puis-je mettre à jour mon Assignment
Schéma.
En règle générale, vous aurez un project
mappé à une assignment
et de même une assignment
mappé à un project
. ce que vous pouvez faire ici est de supprimer un projet, puis de trouver le project
associé dans le modèle d'affectation et supprimez leurs références.
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);
}
});
});
});
}
relation un-plusieurs - Si un Project/Group
est supprimé, comment puis-je mettre à jour mon Assignment
Schéma.
Dans ce scénario, nous supprimons un projet, puis recherchons toutes les assignments
qui appartient à ce project
et en supprimant sa référence. Ici, la situation est qu'il peut y avoir plusieurs devoirs pour un seul projet.
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);
}
});
});
});
}
Supprimer le middleware
Vous pourriez obtenir la même chose via middleware
comme l'a souligné Johnny, juste une correction à ce sujet..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Généralement, il peut y avoir de nombreux projects
appartenant à un assignment
et de nombreux assignments
appartenant au même project
. Vous aurez un assignment
colonne dans votre Project
Schéma où un projet sera lié à plusieurs devoirs.
Remarque : supprimer le middleware ne fonctionnera pas sur les modèles et ne fonctionnera que sur vos documents. Si vous allez avec remove
middleware assurez-vous que dans votre fonction de suppression, vous trouvez project
par identifiant d'abord puis sur le document
renvoyé appliquez la méthode de suppression, donc pour que ce qui précède fonctionne... votre fonction de suppression ressemblerait à ceci.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}