Mongo db,查询一个集合并使用结果查询另一个集合

时间:2020-12-28 21:25:08

标签: mongodb pymongo

抱歉,已经回答了很多类似的问题,但我仍然无法从这些问题中解决我的问题。我有两个集合形状和几何。我已成功查询形状以删除所有红色形状

myquery = {"Colour": "Red"}
x = collection.delete_many(myquery)    

但我想在共享公共字段“名称”的几何集合上使用此查询的结果,以便我从几何中删除任何文档,该几何具有在原始查询中找到的名称(红色形状)< /p>

形状示例

_id: "123"
Colour: "red"
Shape: "square"
Name: "xyz123"
Line: "bold"    

几何示例

 _id: "456"
Height: "6"
Width: "6"
Name: "xyz123"
Area: "36"    

非常感谢

2 个答案:

答案 0 :(得分:0)

我不知道 pymongo,但在 mongo shell 中,它会像这样:

var namesToDelete = db.shapes.distinct("Name", { Color: "Red" });
db.geometries.deleteMany({ Name: { $in: namesToDelete }});
db.shapes.deleteMany({ Color: "Red" });

免责声明:代码“按原样”提供。请在生产前仔细测试! ;)

答案 1 :(得分:0)

pymongo 中的类似解决方案。基本上,您必须在删除 shapes 记录之前获得相应名称的详细信息,因为一旦删除它,它就消失了!

myquery = {'Colour': 'red'}
for shape in db.shapes.find(myquery):
    name = shape.get('Name')
    if name is not None:
        db.geometry.delete_many({'Name': name})

db.shapes.delete_many(myquery)