【问题标题】:MongoDB: deleting an array value in multiple documents in one collection using pymongoMongoDB:使用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'

任何帮助将不胜感激。

【问题讨论】:

    标签: arrays mongodb flask mongodb-query pymongo


    【解决方案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}}) 并且从外观上看是有效的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2015-05-01
    • 1970-01-01
    • 2012-04-07
    • 2017-04-11
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多