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在一个集合中删除多个文档中的数组值的主要内容,如果未能解决你的问题,请参考以下文章

Python MongoDB 删除集合

将 Null 项插入集合 Mongodb (Pymongo)

如何使用 python mongodb 客户端库(pymongo)更新 mongodb 集合中所有文档的字段“类型”

更新嵌套的 MongoDB 集合 (Pymongo)

使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?

100天精通Python(进阶篇)——第40天:pymongo操作MongoDB数据库基础+代码实战