MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Eins-Eins- und Eins-Viele-Referenzen entfernen - Mongoose

Beziehungen:

  1. Ein one-to-one is a relationship so dass ein Staat nur eine Hauptstadt hat und eine Hauptstadt nur die Hauptstadt eines Staates ist
  2. Ein one-to-many is a relationship so dass eine Mutter viele Kinder hat und die Kinder nur eine Mutter haben
  3. Eine many-to-many is a relationship so dass ein Buch von mehreren Autoren oder Co-Autoren geschrieben werden kann, während ein Autor mehrere Bücher schreiben kann.

Eins-zu-Eins-Beziehung – Bei einem Project/Group entfernt wurde, wie kann ich meine Assignment aktualisieren Schema.

Normalerweise haben Sie ein project einer assignment zugeordnet und ebenso eine assignment einem project zugeordnet . Was Sie hier tun können, ist ein Projekt zu entfernen und dann das zugehörige project zu finden im Zuweisungsmodell und entfernen Sie ihre Referenzen.

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);                                      
                    }
                  });
            });
        });
}

Eine-Viele-Beziehung - Wenn ein Project/Group entfernt wurde, wie kann ich meine Assignment aktualisieren Schema.

In diesem Szenario entfernen wir ein Projekt und finden dann alle assignments die zu diesem project gehört und Entfernen seiner Referenz von ihnen. Hier ist die Situation, dass es viele Aufgaben für ein einzelnes Projekt geben kann.

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 entfernen

Das Gleiche könnten Sie auch über middleware erreichen wie von Johnny darauf hingewiesen, nur eine Korrektur dazu..

ProjectSchema.pre('remove', function (next) {
    var project = this;
    project.model('Assignment').update(
        { projects: {$in: project.assignments}}, 
        { $pull: { project: project._id } }, 
        { multi: true }, 
        next
     );
});

Typischerweise kann es viele projects geben Zugehörigkeit zu einer assignment und viele assignments die zum selben project gehören . Sie erhalten eine Assignment Spalte in Ihrem project Schema, bei dem sich ein Projekt auf mehrere Aufgaben bezieht.

Hinweis: Remove Middleware funktioniert nicht bei Modellen und es würde nur bei Ihren Dokumenten funktionieren. Wenn Sie mit remove gehen Middleware stellen Sie sicher, dass Sie in Ihrer Löschfunktion project finden zuerst nach ID und dann auf dem zurückgegebenen document wenden Sie die Methode remove an, damit das obige funktioniert... würde Ihre Löschfunktion so aussehen.

delete: function(req, res) {
   return Project.findById(req.params.id, function(err, project){
         return project.remove(function(err){
             if(!err) {
                  console.log(numberAffected);
             } 
           });                
    });
 }