MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment restreindre la suppression dans MongoDB pour la collecte de relations

Nous pouvons le faire en utilisant $nin

laissez-nous avoir la collection Entreprises avec 3 enregistrements

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

Ayons une collection d'employés avec 3 attributs recordscompany dans la collection d'employés se référant à l'ID de document de la collection d'entreprises, pour les tests, nous avons des employés pour l'entreprise 1 et 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}

Avant de supprimer les entreprises sans employés, nous devons d'abord rechercher les entreprises avec des employés. Pour éviter les entrées multiples, utilisons distinct

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

maintenant nous avons utilisé $nin avec les entreprises distinctes qui ont des employés pour supprimer les entreprises qui n'ont pas d'employés

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

Maintenant, si nous exécutons une requête de recherche sur la collection d'entreprises, nous n'obtiendrons que deux enregistrements.

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

la société 3 est supprimée car elle n'a pas d'employés

J'espère que ça aide !