如何更新已检索的文档?

时间:2012-08-20 20:51:28

标签: python mongodb pymongo

我正在检索这样的文档:

user = db.users.find_one( { '_id' : ObjectId( 'anID' ) } )

但是,如果我想更改“性别”的值,我无法弄清楚如何更新文档。这不起作用:

newValue = { 
        'gender' : gender
        }

db.users.update( user, newValue, False )

我的语法错了吗?什么是更新用户的最佳方式

2 个答案:

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