Podemos hacer esto usando $nin
tengamos una colección de Empresas con 3 registros
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"}
Tengamos una colección de empleados con 3 atributos de empresa de registros en la colección de empleados que se refiere a la identificación del documento de la colección de empresas, para probar tenemos empleados para la empresa 1 y 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}
Antes de eliminar las empresas sin empleados, primero debemos encontrar las empresas con empleados. Para evitar múltiples entradas, usemos distinct
db.employees.distinct("company")
[ 1, 2 ]
ahora hemos usado $nin con las distintas empresas que tienen empleados para eliminar las empresas que no tienen empleados
db.companies.remove({"_id":{$nin : db.employees.distinct("company")}});
Ahora, si ejecutamos la consulta de búsqueda en la colección de empresas, obtendremos solo dos registros.
db.companies.find();
{ "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" }
{ "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" }
se elimina la empresa 3 porque no tiene empleados
¡Espero que ayude!