MongoDB:使用pymongo在一个集合中删除多个文档中的数组值
Posted
技术标签:
【中文标题】MongoDB:使用pymongo在一个集合中删除多个文档中的数组值【英文标题】:MongoDB: deleting an array value in multiple documents in one collection using pymongo 【发布时间】:2021-09-15 03:02:49 【问题描述】:下午。我希望你能帮助解决一个问题。我正在使用创建一个 Flask 应用程序并使用 pymongo,我需要从一个集合中多个文档的多个数组中删除一个奇异数组值。我在“食谱”集合中有食谱文档,每个文档中有一个数组(“类别”),长度可以在 1 到 3 个值之间。我在我的网站的管理部分中有一个可用的功能,允许从“类别”集合中删除一个类别,因此,我想删除“类别”数组中该类别值的任何实例在食谱“集合”中的任何食谱文档上。
我已经设法在一个文档上做到这一点:
mongo.db.recipes.update(
"_id": ObjectId("60df2eec9df14e58d0c698c8"),
"$pull": "category": category_id
)
但还没有对整个集合进行管理我已经确定我需要在集合上使用 $all 和 $pull 运算符,使用“update_many”查询并且到目前为止已经尝试过:
mongo.db.recipes.update_many("category": "$all": "$pull": "category": category_id)
mongo.db.recipes.update_many("$all": "$pull": "category": category_id)
mongo.db.recipes.update_many("category": "$pullAll": "category": category_id)
它们都不起作用。我不断收到错误消息:
TypeError: update_many() missing 1 required positional argument: 'update'
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:阅读 - https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html?highlight=update_many#pymongo.collection.Collection.update_many
第一个参数是过滤器,如果你想更新所有文档,它将是
mongo.db.recipes.update_many(
// filter filter,
// update
)
mongo.db.recipes.update_many( , "$pull": "category": category_id)
【讨论】:
感谢您回答 Tushar,我已经尝试过:mongo.db.recipes.update_many("$filter": input: "category", "$all": "$pull": "category": category_id)
,但没有运气 - 正确的语法是什么?
您是否有密钥为input
的文档?
数组的键是'category',最多可以有三个值。我已经尝试了您的建议并收到错误 pymongo.errors.WriteError: Unknown modifier: $all.需要指定为数组的有效更新修饰符或管道样式更新,完全错误:'index':0,'code':9,'errmsg':'未知修饰符:$all。需要指定为数组的有效更新修饰符或管道样式更新'
所以我试过了:1) mongo.db.recipes.update_many("input": "category", "$pull": "category": category_id)跨度>
刚刚尝试过这个:mongo.db.recipes.update_many( , "$pull": "category": category_id) 并且从外观上看是有效的!以上是关于MongoDB:使用pymongo在一个集合中删除多个文档中的数组值的主要内容,如果未能解决你的问题,请参考以下文章
将 Null 项插入集合 Mongodb (Pymongo)
如何使用 python mongodb 客户端库(pymongo)更新 mongodb 集合中所有文档的字段“类型”