我有一个 mongo 数据库和几个集合。我想从集合中删除所有匹配的条目,比如 target_id。诀窍是我还必须删除与 target_id 匹配的条目“连接”的条目。
例如
DB
Culture (_id, owner_id)
Document (_id, target_id)
Entity (_id, target_id)
Field (_id, entity_id)
Form (_id, target_id)
Question (_id, form_id)
Layout (_id, question_id)
现在,我可以通过以下方式轻松删除所有文档
db.Document.remove( {"_id": ObjectId(target_id)});
所以第一个棘手的部分是文化集合中的某些条目可能有 owner_id = document_id。因此,在删除实体条目之前,我还必须删除文化条目。
第二个问题是我不能通过字段集合中的target_id条目直接访问,因为这些字段可以通过entity_id找到。
因此,我想编写一个脚本/查询以从提供 target_id 的 mongo shell 运行,然后删除 target_id 直接或间接“引用”的所有条目。我没有通过 id 进行简单的查找/删除的经验,所以这个查询被卡住了。
据我了解,我可以一步一步地做到这一点,比如说,首先找到所有实体:
db.Entity.find({ "$where" : "{"target_id" : ObjectId(target_id)}" });
第二步是从上面的查询中删除所有拥有 owner_id = entity id 的每个实体的文化。我怎么能跑
db.Culture.find({ "$where" : "{"owner_id" : ObjectId(entity_id)}" });
entity_id 遍历所有实体的第一个查询在哪里?