MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como restringir a exclusão no MongoDB para coleta de relacionamento


Podemos fazer isso usando $nin

vamos ter coleção Empresas com 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"}

Vamos ter a coleção de funcionários com 3 registros O atributo empresa na coleção de funcionários refere-se ao documento id da coleção de empresas, para teste temos funcionários para empresa 1 e 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 remover as empresas sem funcionários, primeiro precisamos encontrar as empresas com funcionários. Para evitar várias entradas, use distinct
db.employees.distinct("company")
[ 1, 2 ]

agora usamos $nin com as empresas distintas que têm funcionários para remover as empresas que não têm funcionários
db.companies.remove({"_id":{$nin : db.employees.distinct("company")}});

Agora, se executarmos a consulta find na coleção de empresas, obteremos apenas dois registros.
db.companies.find();
{ "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" }
{ "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" }

empresa 3 é removida por não ter funcionários

Espero que ajude!