2016-10-07 2 views
0

Below Modelle löschen beschränken wir zum Beispiel betrachten können:Wie in MongoDB für Beziehung Sammlung

Companies {Name: string, Address:string} 

Employees {FirstName: string, 
      lastName:String, 
      Company: {type:mongoose.schema.objectID,ref:companies} 
} 

Benötigen Löschen von Unternehmen zu beschränken, die Mitarbeiterdaten auf Datenbankebene hat, ohne „pre“ Middleware.

Ich bin auf der Suche nach einer Lösung, die MySQL-Beziehungen Constraint ähnelt - auf delete beschränken.

+0

http://stackoverflow.com/questions/8195190/how-to-enforce-foreign-keys-in-nosql-databases-mongodb siehe hier .. –

Antwort

3

Wir können dies tun, indem $nin

lassen Sie uns Firmen Sammlung mit 3 Datensätze

db.companies.find(); 

{"_id":1, "name":"ABC Pvt Ltd", "Address":"Chennai, India"} 
{"_id":2, "name":"XYZ Pvt Ltd", "Address":"Mumbai, India"} 
{"_id":3, "name":"LMN Pvt Ltd", "Address":"Delhi, India"} 

Lassen Sie haben uns Mitarbeiter Sammlung mit 3 Datensätze Unternehmen Attribut in der Mitarbeiter Sammlung bezieht sich das Dokument-ID der Unternehmen haben Sammlung, zum Testen haben wir Mitarbeiter für Firma 1 und 2.

db.employees.find(); 

{"_id":1, "firstname":"X", "lastname":"Y", "company":1} 
{"_id":2, "firstname":"A", "lastname":"B", "company":1} 
{"_id":2, "firstname":"Z", "lastname":"A", "company":2} 

Vor rem Wenn wir die Unternehmen ohne Mitarbeiter haben, müssen wir zuerst die Unternehmen mit Mitarbeitern finden. Um mehrere Einträge zu vermeiden lassen Sie uns distinct verwenden

db.employees.distinct("company") 
[ 1, 2 ] 

jetzt haben wir $ nin mit den verschiedenen Unternehmen verwendet, die Mitarbeiter, die Unternehmen zu entfernen hat, die nicht Mitarbeiter

db.companies.remove({"_id":{$nin : db.employees.distinct("company")}}); 

Jetzt mit, wenn wir feststellen Abfrage ausführen Auf der Firmensammlung werden wir nur zwei Aufzeichnungen bekommen.

db.companies.find(); 
{ "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" } 
{ "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" } 

Unternehmen 3 entfernt, da es keine Mitarbeiter hat

hoffe, es hilft!