Мы можем сделать это, используя $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 удалена, так как в ней нет сотрудников
Надеюсь, поможет!
person
Clement Amarnath
schedule
07.10.2016