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)