MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Suppression des références un-un et un-plusieurs - Mongoose

Relations :

  1. 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
  2. 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
  3. 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);
             } 
           });                
    });
 }