TypeError:update()缺少1个必需的位置参数:“ document”

时间:2019-08-11 07:44:23

标签: python-3.x mongodb

我试图将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”

2 个答案:

答案 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'}})