MongoDB中查询结果的查询

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

我有一个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\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,则需要查找运算符

  • set1=查找所有要删除的ID
  • set2=在set1中查找ID的所有引用ID
  • 使用set2删除与该ID匹配的所有文档
  • 删除与该ID匹配的所有文档以及带有set1的in运算符
  • 在层次结构中重复执行此操作

    例如:

    db.Culture.find({"owner_id" : {"$in":[set_of_entityids]" }});
    
    注意,您可以从查询中获得bson ID,因此可能不需要使用ObjectId作为前缀


    HTH

    使用findAndMondify的方法之一。您可以在更新文档的同时将ID取回。因此,您将把文档标记为ACTIVE=FALSE,然后将id返回findAndModify。在最后一个示例中,只需删除所有活动项=FALSE。您可以看到我在应用程序中是如何使用的:

    什么是IIUC?这是某种俚语吗?我理解正确:)似乎你的数据是相关的。。。mongo不是这种东西的好选择。