首页 > 解决方案 > Pymongo update_one

问题描述

我有如下 JSON

{"city": "New York"}, {"$set": {"city": "Toronto"}}

当我在 update_one 方法中直接给出这个

database.collection.update_one({"city": "New York"}, {"$set": {"city": "Toronto"}})

它工作得很好,没有问题。

但是当我分配给一个变量时

temp = {"city": "New York"}, {"$set": {"city": "Toronto"}}
database.collection.update_one(temp)

这给了我以下错误:

TypeError("update_one() missing 1 required positional argument: 'update'",)

我用过

json.loads(temp)

json.dumps(temp)

没有为我工作?任何的想法。

标签: python-3.xpymongo-3.x

解决方案


问题是当你这样做时:

database.collection.update_one({"city": "New York"}, {"$set": {"city": "Toronto"}})

您正确地传递了两个位置参数:第一个(对应于filter)是{"city": "New York"},第二个(对应于update)是{"$set": {"city": "Toronto"}}

但是,当您这样做时:

temp = {"city": "New York"}, {"$set": {"city": "Toronto"}}
database.collection.update_one(temp)

您现在正在传递一个位置参数,它是一个元组,因此有关缺少参数的错误消息。

您需要做的是:

a) 将元组展开为位置参数:

temp = {"city": "New York"}, {"$set": {"city": "Toronto"}}
database.collection.update_one(*temp)  # Notice the "*" here

b) 传递多个位置参数:

filter, update = {"city": "New York"}, {"$set": {"city": "Toronto"}}  # Tuple expanded here, as two variable
database.collection.update_one(filter, update)

推荐阅读