sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo restringir la eliminación en MongoDB para la recopilación de relaciones

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!