sql >> Database >  >> NoSQL >> MongoDB

Een-een- en een-veel-referenties verwijderen - Mongoose

Relaties:

  1. Een one-to-one is a relationship zodanig dat een staat slechts één hoofdstad heeft en een hoofdstad de hoofdstad is van slechts één staat
  2. Een one-to-many is a relationship zodat een moeder veel kinderen heeft en de kinderen maar één moeder
  3. Een many-to-many is a relationship zodat een boek door meerdere auteurs of co-auteurs kan worden geschreven, terwijl een auteur meerdere boeken kan schrijven.

een-op-een relatie - Als een Project/Group is verwijderd, hoe kan ik mijn Assignment updaten Schema.

Meestal heb je één project toegewezen aan één assignment en zo ook een assignment toegewezen aan één project . wat je hier kunt doen is een project verwijderen en dan het bijbehorende project zoeken in opdrachtmodel en hun referenties verwijderen.

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

een-veel-relatie - Als een Project/Group is verwijderd, hoe kan ik mijn Assignment updaten Schema.

In dit scenario verwijderen we een project en vinden dan alle assignments die bij dit project hoort en het verwijderen van de verwijzing van hen. Hier is de situatie, er kunnen veel opdrachten zijn voor een enkel 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 verwijderen

Je zou hetzelfde kunnen bereiken via middleware zoals opgemerkt door Johnny, slechts een correctie daarop..

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

Meestal kunnen er veel projects . zijn behorend bij een assignment en veel assignments behorend tot hetzelfde project . Je krijgt een assignment kolom in uw Project Schema waarin één project betrekking heeft op meerdere opdrachten.

Opmerking: middleware verwijderen werkt niet op modellen en werkt alleen op uw documenten. Als je gaat met remove middleware zorgt ervoor dat u in uw verwijderfunctie project . vindt eerst op id en vervolgens op het geretourneerde document pas de verwijdermethode toe, dus om het bovenstaande te laten werken... zou uw verwijderfunctie er als volgt uit zien.

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


  1. Mongo $in operatorprestaties

  2. Mongodb-aggregatie $groep, beperk de lengte van de array

  3. AngularJs en MongoDB/Mongoose gebruiken

  4. Is niet-blokkerende Redis pubsub mogelijk?