sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man begränsar radering i MongoDB för relationsinsamling

Vi kan göra detta med $nin

låt oss ha företagsinsamling med 3 poster

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"}

Låt oss ha personalinsamling med 3 recordscompany-attribut i personalsamlingen hänvisar till dokument-id för företagsinsamling, för testning har vi anställda för företag 1 och 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}

Innan vi tar bort företag utan anställda måste vi först hitta företagen med anställda. För att undvika flera poster låt oss använda distinct

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

nu har vi använt $nin med de distinkta företag som har anställda för att ta bort företag som inte har anställda

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

Om vi ​​nu kör sökfrågan på företagsinsamling får vi bara två poster.

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

företag 3 tas bort eftersom det inte har några anställda

Hoppas det hjälper!




  1. MongoDB Intern implementering av indexering?

  2. Kan inte använda importsatsen utanför moduler

  3. GSSException:Inga giltiga referenser tillhandahålls (Mekanismnivå:Det gick inte att hitta någon Kerberos-tgt)

  4. hur lägger man till --auth för mongodb-bild när man använder docker-compose?