sql >> Database teknologi >  >> NoSQL >> MongoDB

Fjernelse af en-en og en-mange referencer - Mongoose

Relationer:

  1. En en-til-en er en relation sådan at en stat kun har én hovedstad og en hovedstad kun er hovedstaden i én stat
  2. En en-til-mange er en relation sådan at en mor har mange børn, og børnene kun har én mor
  3. En mange-til-mange er en relation sådan at en bog kan skrives af flere forfattere eller medforfattere, mens en forfatter kan skrive flere bøger.

én-en-relation - Hvis et Projekt/Gruppe er fjernet, hvordan kan jeg opdatere min Tildeling Skema.

Typisk vil du have ét projekt knyttet til én opgave og tilsvarende én opgave knyttet til ét projekt . hvad du kan gøre her er at fjerne et projekt og derefter finde det tilhørende projekt i opgavemodel og fjern deres referencer.

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

et-mange forhold - Hvis et Projekt/Gruppe er fjernet, hvordan kan jeg opdatere min Tildeling Skema.

I dette scenarie fjerner vi et projekt og finder derefter alle tildelinger som hører til dette projekt og fjerne dens reference fra dem. Her er situationen, der kan være mange opgaver til et enkelt projekt.

slet: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( fejl); } }); }); });} 

Fjern middleware

Du kan opnå det samme via middleware som påpeget af Johnny, lige en rettelse 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 );}); 

Typisk kan der være mange projekter tilhørende en opgave og mange opgaver tilhørende det samme projekt . Du vil have en opgave kolonne i dit Projekt Skema, hvor ét projekt vil relatere til flere opgaver.

Bemærk: fjern middleware virker ikke på modeller, og det virker kun på dine dokumenter. Hvis du går med fjern middleware sikre i din slettefunktion, finder du project med id først og derefter på det returnerede dokument anvend fjernmetoden, så for at ovenstående virker... vil din slettefunktion se sådan ud.

slet:function(req, res) { return Project.findById(req.params.id, function(err, project){ return project.remove(function(err){ if(!err) { console .log(nummerpåvirket); } }); }); }

  1. MongoDB $last Aggregation Pipeline Operator

  2. Hvorfor er MongoDB så hurtigt

  3. Mest populære NoSQL-databaser understøttet af ClusterControl

  4. Sådan deaktiveres Redis Caching under kørsel, hvis redis-forbindelsen mislykkedes