Pymongo update_one

时间:2019-03-01 21:52:57

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

我有如下所示的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)

不是为我工作吗?任何想法。

1 个答案:

答案 0 :(得分:0)

问题是,当您这样做时:

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)