MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Премахване на една-една и една-много препратки - Mongoose

Взаимоотношения:

  1. one-to-one is a relationship така че една държава има само една столица, а столицата е столица само на една държава
  2. one-to-many is a relationship така, че майката има много деца, а децата имат само една майка
  3. many-to-many is a relationship така че една книга може да бъде написана от няколко автори или съавтори, докато един автор може да напише няколко книги.

Връзка едно-едно - Ако е Project/Group е премахнат, как мога да актуализирам моето Assignment Схема.

Обикновено ще имате един project съпоставени с едно assignment и по подобен начин едно assignment съпоставени с един project . това, което можете да направите тук, е да премахнете проект и след това да намерите свързания project в модела на присвояване и премахнете техните препратки.

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

Връзка един-много - Ако е Project/Group е премахнат, как мога да актуализирам моето Assignment Схема.

В този сценарий премахваме проект и след това намираме всички assignments който принадлежи към този project и премахване на препратката от тях. Тук ситуацията е, че може да има много задачи за един проект.

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 както посочи Джони, само корекция на това...

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

Обикновено може да има много projects принадлежащи към assignment и много assignments принадлежащи към същия project . Ще имате assignment колона във вашия Project Схема, при която един проект ще бъде свързан с множество задачи.

Забележка: премахване на междинен софтуер няма да работи на модели и ще работи само на вашите документи. Ако отивате с remove Мидълуерът гарантира, че във вашата функция за изтриване ще намерите project първо по id и след това върху върнатия document приложете метода за премахване, така че за да работи горното... вашата функция за изтриване ще изглежда така.

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. Как мога да заредя данни от колекция mongodb в DataFrame на pandas?

  2. MongoDB $exp

  3. Преглед на WiredTiger Storage Engine за MongoDB

  4. Как да проектирате индекс на масив след размотаване на масив с MongoDB рамка за агрегиране

  5. В документацията на обещанията на Mongoose се казва, че заявките не са обещания?