如何限制MongoDB中的删除以进行关系收集

时间:2016-10-07 09:46:34

标签: mongodb mongoose mongoose-schema

我们可以考虑以下模型:

Companies {Name: string, Address:string}

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

需要限制删除在数据库级别拥有员工记录的公司,而不使用" pre"中间件。

我正在寻找一些类似于MySQL关系约束的解决方案 - 关于删除限制。

1 个答案:

答案 0 :(得分:3)

我们可以使用$nin

执行此操作

让我们拥有3条记录的公司集合

${#1} -ge 7

让我们让员工收集3条记录 员工集合中的公司属性是指公司集合的文档ID,为了测试我们有公司1和2的员工。

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"}

在删除没有任何员工的公司之前,首先我们需要找到有员工的公司。为避免多次输入,我们使用distinct

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}

现在我们已经使用$ nin与雇员的不同公司删除没有雇员的公司

db.employees.distinct("company")
[ 1, 2 ]

现在,如果我们在公司集合上执行查询查询,我们将只获得两条记录。

db.companies.remove({"_id":{$nin : db.employees.distinct("company")}});

公司3因为没有员工而被删除

希望它有帮助!