MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So beschränken Sie das Löschen in MongoDB für die Beziehungserfassung

Wir können dies mit $nin tun

Lassen Sie uns eine Firmensammlung mit 3 Datensätzen haben

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 uns eine Mitarbeitersammlung mit 3 Datensätzen haben. Das Firmenattribut in der Mitarbeitersammlung bezieht sich auf die Dokument-ID der Firmensammlung, zum Testen haben wir Mitarbeiter für Unternehmen 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}

Bevor wir die Unternehmen ohne Mitarbeiter entfernen, müssen wir zuerst die Unternehmen mit Mitarbeitern finden. Um Mehrfacheinträge zu vermeiden, verwenden wir distinct

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

Jetzt haben wir $nin mit den verschiedenen Unternehmen verwendet, die Mitarbeiter haben, um die Unternehmen zu entfernen, die keine Mitarbeiter haben

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

Wenn wir jetzt eine Suchabfrage für die Firmensammlung ausführen, erhalten wir nur zwei Datensätze.

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

Firma 3 wird entfernt, da sie keine Mitarbeiter hat

Hoffe es hilft!