如何使用 python 更新 MongoDB 文档?

Posted

技术标签:

【中文标题】如何使用 python 更新 MongoDB 文档?【英文标题】:How can I update a MongoDB document with python? 【发布时间】:2018-07-21 05:39:10 【问题描述】:

我想做的是用 python 和 discord.py 更新一个 MongoDB 文档,但是我放的代码不起作用。

elif string2 == "add":
    if string3 == "administrator":
        cur = coll.find("_id" : string1.id)
        for doc in cur:
            if doc["perm"] == "administrator":
                await self.bot.say("Permission  already found on db for user ".format(string3, string1.name))
            else:
                db.users.update_one("_id" : string1.id, "name" : string1.name, "perm" : "administrator", upsert=False)
                await self.bot.say("Permissions updated on db for user ".format(string1.name))

以下是错误。

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: update_one() missing 1 required positional argument: 'update'

来自用户集合的文档:

_id: "191598787410526208"
name: "Stevyb0t"
perm: "administrator"

【问题讨论】:

您需要将第二个参数传递给update_one,以便更新文档并避免此类错误。它看起来像这样,db.users.update_one(, , upsert=False) @NileshSingh ,它说“更新只适用于 $ 运营商”。 如果您可以使用edit 链接更新您的问题并向我们展示来自users 集合的示例文档,将会有很大帮助 @chridam ,完成。 就像@NileshSingh 所说的,试试db.users.update_one("_id" : string1.id, "$set": "name" : string1.name, "perm" : "administrator", upsert=False) 【参考方案1】:

基本上是其他人评论的内容,但有一些格式使其更清晰:

db.users.update_one(
    "_id": string1.id,
    "$set":
        "name": string1.name,
        "perm": "administrator"
    )

我还删除了upsert=False,因为这是默认值,所以你不需要指定它 - 当然,明确会有所帮助

编辑:阅读所有的 cmets,已经提出了将接受的评论作为答案的建议,所以就在这里。我的回答和那条评论没有什么不同

【讨论】:

【参考方案2】:

如果您的 id 是字符串,您可能需要将其转换为 ObjectId。此外,您可以打印更新结果,并检查是否成功:

from bson import ObjectId

result = db.users.update_one(
             "_id": ObjectId(string1.id),
             "$set":
                 "name": string1.name,
                  "perm": "administrator"
             )

logger.debug('update result: '.format(result.raw_result))
if result.matched_count > 0:
    # Success code goes here
    pass
else:
    # Failure code goes here
    pass

【讨论】:

以上是关于如何使用 python 更新 MongoDB 文档?的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 快速有效地更新数百万个 MongoDB 文档的技巧?

Python MongoDB 更新

Python MongoDB 更新

如何使用子文档数组更新 MongoDB 文档

如何使用 Java 中的 ObjectID 更新 MongoDB 中的文档

MongoDB:如何使用单个命令更新多个文档?