sql >> Databasteknik >  >> NoSQL >> MongoDB

Ta bort en-en och en-många referenser - Mongoose

Relationer:

  1. En one-to-one is a relationship så att en stat bara har en huvudstad och en huvudstad är huvudstad i endast en stat
  2. En one-to-many is a relationship så att en mamma har många barn, och barnen har bara en mamma
  3. En many-to-many is a relationship så att en bok kan skrivas av flera författare eller medförfattare, medan en författare kan skriva flera böcker.

en-en-relation - Om ett Project/Group tas bort, hur kan jag uppdatera min Assignment Schema.

Vanligtvis har du ett project mappad till en assignment och på liknande sätt en assignment mappad till ett project . vad du kan göra här är att ta bort ett projekt och sedan hitta det associerade project i uppdragsmodellen och ta bort deras referenser.

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

en-många-relation - Om ett Project/Group tas bort, hur kan jag uppdatera min Assignment Schema.

I det här scenariot tar vi bort ett projekt och hittar sedan alla assignments som tillhör detta project och tar bort dess referens från dem. Här är situationen, det kan vara många uppdrag för ett enskilt projekt.

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

Ta bort mellanprogram

Du kan uppnå samma sak via middleware som Johnny påpekade, bara en rättelse på det..

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

Vanligtvis kan det finnas många project som tillhör ett assignment och många assignment som tillhör samma project . Du kommer att ha en assignment kolumnen i ditt Project Schema där ett projekt kommer att relatera till flera uppdrag.

Obs! ta bort mellanprogram fungerar inte på modeller och det fungerar bara på dina dokument. Om du går med remove middleware säkerställ i din raderingsfunktion hittar du project av id först och sedan på det returnerade document använd borttagningsmetoden, så för att ovanstående ska fungera... skulle din raderingsfunktion se ut så här.

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 distinkt &var i samma fråga?

  2. PHP-start Kan inte ladda det dynamiska biblioteket php_mongo.dll

  3. MongoEngine Document Object som gjorts med from_json sparas inte

  4. Skrivskyddat filsystem när du försöker mkdir /data/db på Mac