Как ограничить удаление в MongoDB для сбора отношений

Ниже модели мы можем рассмотреть, например:

Companies {Name: string, Address:string}

Employees {FirstName: string, 
           lastName:String, 
           Company: {type:mongoose.schema.objectID,ref:companies}
}

Необходимо ограничить удаление компаний, в которых есть записи о сотрудниках на уровне базы данных, без использования «предварительного» промежуточного программного обеспечения.

Я ищу какое-то решение, похожее на ограничение отношений MySQL - ограничение на удаление.


person Sagar Mahajan    schedule 07.10.2016    source источник
comment
stackoverflow .com/questions/8195190/ взгляните сюда..   -  person Umakant Mane    schedule 07.10.2016


Ответы (1)


Мы можем сделать это, используя $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