我正在检索这样的文档:
user = db.users.find_one( { '_id' : ObjectId( 'anID' ) } )
但是,如果我想更改“性别”的值,我无法弄清楚如何更新文档。这不起作用:
newValue = {
'gender' : gender
}
db.users.update( user, newValue, False )
我的语法错了吗?什么是更新用户的最佳方式
答案 0 :(得分:4)
您的更新语法不正确,应该是:
update(spec, document, upsert=False, multi=False, ...)
spec
与您用于查找的过滤器相同,即{ '_id' : ObjectId( 'anID' ) }
您可以通过将文档替换为已修改的文档来更新文档,也可以使用目标更新来仅更改特定值。目标更新的优点是它可以节省您第一次到服务器的往返,以获取用户文档。
替换更新:
user = db.users.find_one( { '_id' : ObjectId( 'anID' ) } )
user['gender'] = newGender
db.users.update( { '_id' : user['_id'] }, user, False)
有针对性的更新:
db.users.update( { '_id' : ObjectId( 'anID' ) }, \
{ '$set': { 'gender' : newGender } }, False )
答案 1 :(得分:0)
如果您不想替换整个文档,则应使用$set运算符:
db.users.update( { '_id': user['_id'] }, { '$set': newValue }, False )