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)

у меня не сработало? Любая идея.

1 ответ

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

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)

Теперь вы передаете один позиционный аргумент, который является кортежем, отсюда и сообщение об ошибке об отсутствующем аргументе.

Что вам нужно сделать, это либо:

а) Разверните кортеж как позиционные аргументы:

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

б) передать несколько позиционных аргументов:

filter, update = {"city": "New York"}, {"$set": {"city": "Toronto"}}  # Tuple expanded here, as two variable
database.collection.update_one(filter, update)
Другие вопросы по тегам