我们可以使用$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 条记录的员工集合
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 被删除,因为它没有员工
希望对你有帮助!