MongoDB中查询结果的查询
我有一个mongo数据库和几个集合。我想从集合中删除所有匹配(比如)target_id的实体。诀窍是我还必须删除“连接”到匹配target_id的条目的条目 比如说MongoDB中查询结果的查询,mongodb,database,Mongodb,Database,我有一个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) Layou
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\u id=document\u id。因此,在删除实体条目之前,我还必须删除区域性条目
第二个问题是,我不能直接通过字段集合中的target_id项访问,因为这些字段可以通过实体_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)}" });
如果实体id在第一个查询中迭代所有实体?IIUC,则需要查找运算符
db.Culture.find({"owner_id" : {"$in":[set_of_entityids]" }});
注意,您可以从查询中获得bson ID,因此可能不需要使用ObjectId作为前缀
HTH使用findAndMondify的方法之一。您可以在更新文档的同时将ID取回。因此,您将把文档标记为ACTIVE=FALSE,然后将id返回findAndModify。在最后一个示例中,只需删除所有活动项=FALSE。您可以看到我在应用程序中是如何使用的:什么是IIUC?这是某种俚语吗?我理解正确:)似乎你的数据是相关的。。。mongo不是这种东西的好选择。