sql >> Databáze >  >> NoSQL >> MongoDB

Odstranění reference one-one a one-many - Mongoose

Vztahy:

  1. one-to-one is a relationship takový, že stát má pouze jedno hlavní město a hlavní město je hlavním městem pouze jednoho státu
  2. one-to-many is a relationship taková, že matka má mnoho dětí a děti mají pouze jednu matku
  3. many-to-many is a relationship tak, že knihu může napsat několik autorů nebo spoluautorů, zatímco autor může napsat několik knih.

vztah jeden – Pokud jde o Project/Group je odstraněn, jak mohu aktualizovat své Assignment Schéma.

Obvykle budete mít jeden project mapováno na jedno assignment a podobně jedno assignment mapováno na jeden project . co zde můžete udělat, je odstranit projekt a poté najít přidružený project v modelu přiřazení a odstraňte jejich reference.

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

vztah one-many – Pokud jde o Project/Group je odstraněn, jak mohu aktualizovat své Assignment Schéma.

V tomto scénáři odstraňujeme projekt a pak hledáme všechna assignments který patří k tomuto project a odstranit z nich jeho odkaz. Zde je situace taková, že pro jeden projekt může být mnoho úkolů.

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

Odstraňte middleware

Totéž můžete dosáhnout pomocí middleware jak poukázal Johnny, jen oprava..

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

Obvykle může existovat mnoho projects patřící k assignment a mnoho assignments patřící ke stejnému project . Budete mít assignment ve vašem Project Schéma, kde se jeden projekt bude týkat více úkolů.

Poznámka: remove middleware nebude fungovat na modelech a bude fungovat pouze na vašich dokumentech. Pokud se chystáte pomocí remove middleware zajistí, že ve funkci mazání najdete project nejprve pomocí id a poté na vráceném document použijte metodu remove, takže aby výše uvedené fungovalo... vaše funkce odstranění by vypadala takto.

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


  1. MongoDB $ hodina

  2. Mongoose findOneAndUpdate a upsert nevrací žádné chyby, žádné ovlivněné dokumenty

  3. kanály bez kanálové vrstvy nebo jiného bezplatného hostingu

  4. import JSON do mongoDB pomocí pymongo