我试图将compareing属性和$ set属性都绑定在一个变量中,并渲染为mongodb中的update函数。但这给了我下面的错误
TypeError:update()缺少1个必需的位置参数:“ document”
Python 3 MongoDB
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")
db = client.Mydb
collection = db.sampledb
new_contact = "6369723748"
updatestmt = "{\"ID\" : \"12345\"},{\"$set\" :{\"ID\" : \"67891\",\"Account_Number\" : \"1234 5678 9101\"}}"
print(updatestmt)
cursor = collection.update(updatestmt)
cursor1 = collection.find()
for i in cursor1:
print(i)
预期结果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
实际结果:
回溯(最近通话最近一次):
文件“ dbupdate.py”,第十二行,位于
光标= collection.update(updatestmt)
TypeError:update()缺少1个必需的位置参数:“ document”
答案 0 :(得分:0)
pymongo
使用的是字典,而不是字符串。 (该错误仅表明您正在传递一个字符串,而该字符串期望至少有两个参数)。
因此使用:
query = {"ID" : "12345"}
new_values = {"$set" : {"ID" : "67891", "Account_Number" : "1234 5678 9101"}}
cursor = collection.update(query, new_values)
或者,为了匹配您的语法:
updatestmt = ({"ID" : "12345"}, {"$set" : {"ID" : "67891", "Account_Number" : "1234 5678 9101"}})
cursor = collection.update(*updatestmt)
顺便说一句:update
现在已替换为update_one
(根据需要)或update_many
(如果查询可以匹配多个记录)
答案 1 :(得分:0)
update()
是deprecated,您应该真正使用update_one()。
cursor = collection.update({'ID' : '12345'}, {'$set' : {'ID' : '67891', 'Account_Number' : '1234 5678 9101'}})