Pymongo update_one - PullRequest
       30

Pymongo update_one

0 голосов
/ 02 марта 2019

У меня есть 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 голосов
/ 02 марта 2019

Проблема в том, что когда вы делаете:

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)
...