Можем да направим това с помощта на $nin
нека имаме колекция от компании с 3 записа
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"}
Нека имаме колекция от служители с 3 записа. Атрибутът на компанията в колекцията от служители препраща към идентификатора на документа на колекцията от компании, за тестване имаме служители за компания 1 и 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}
Преди да премахнем компаниите без служители, първо трябва да намерим компаниите със служители. За да избегнем множество записи, нека използваме distinct
db.employees.distinct("company")
[ 1, 2 ]
сега използвахме $nin с отделните компании, които имат служители, за да премахнем компаниите, които нямат служители
db.companies.remove({"_id":{$nin : db.employees.distinct("company")}});
Сега, ако изпълним заявка за намиране на събиране на компании, ще получим само два записа.
db.companies.find();
{ "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" }
{ "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" }
фирма 3 е премахната, тъй като няма служители
Надявам се да помогне!