MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Usuwanie odniesień jeden-jeden i jeden-wiele - Mongoose

Relacje:

  1. one-to-one is a relationship tak, że państwo ma tylko jedną stolicę, a stolica jest stolicą tylko jednego państwa
  2. one-to-many is a relationship tak, że matka ma wiele dzieci, a dzieci mają tylko jedną matkę
  3. many-to-many is a relationship tak, że książka może być napisana przez kilku autorów lub współautorów, podczas gdy autor może napisać kilka książek.

relacja jeden-jeden — Jeśli Project/Group został usunięty, jak mogę zaktualizować moje Assignment Schemat.

Zazwyczaj będziesz mieć jeden project mapowane do jednego assignment i podobnie jedno Assignment mapowane do jednego project . możesz tutaj usunąć projekt, a następnie znaleźć powiązany project w modelu przydziału i usuń ich referencje.

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

relacja jeden-wiele — Jeśli Project/Group został usunięty, jak mogę zaktualizować moje Assignment Schemat.

W tym scenariuszu usuwamy projekt, a następnie znajdujemy wszystkie assignment który należy do tego project i usuwając z nich swoje odniesienie. Oto sytuacja, w której może być wiele zadań dla jednego projektu.

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

Usuń oprogramowanie pośredniczące

Możesz osiągnąć to samo za pomocą middleware jak zauważył Johnny, tylko korekta tego...

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

Zazwyczaj może być wiele projects należące do assignment i wiele assignments należące do tego samego project . Będziesz mieć Assignment kolumna w Twoim Project Schemat, w którym jeden projekt będzie powiązany z wieloma zadaniami.

Uwaga: usuń oprogramowanie pośredniczące nie będzie działać na modelach i będzie działać tylko na twoich dokumentach. Jeśli wybierasz się z remove oprogramowanie pośredniczące zapewnia, że ​​w funkcji usuwania znajdziesz project najpierw przez id, a następnie na zwróconym document zastosuj metodę usuwania, aby powyższe zadziałało... Twoja funkcja usuwania będzie wyglądać tak.

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zmień nazwę ObjectId _id na id w deserializacji Jacksona za pomocą Jongo i MongoDB

  2. Jak w MongoDB zwrócić tylko część tablicy?

  3. 5 sposobów na wybranie wierszy o maksymalnej wartości dla ich grupy w SQL

  4. Wstaw element do zagnieżdżonych tablic w MongoDB

  5. limity liczby zbiorów w bazach danych