gpt4 book ai didi

mongodb - 如何在 MongoDB 中限制删除关系集合

转载 作者:行者123 更新时间:2023-12-01 22:21:13 25 4
gpt4 key购买 nike

我们可以考虑以下模型:

Companies {Name: string, Address:string}

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

需要在不使用“pre”中间件的情况下限制删除在数据库级别有员工记录的公司。

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

最佳答案

我们可以使用 $nin 来做到这一点

让我们拥有包含 3 条记录的 Companies 集合

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 条记录的员工employees 集合中的 company 属性是指公司集合的文档 id,为了测试我们有公司 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 被删除,因为它没有员工

希望对您有所帮助!

关于mongodb - 如何在 MongoDB 中限制删除关系集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com