0

我正在检索这样的文档:

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

但是如果我想更改“性别”的值,我不知道如何更新文档。这不起作用:

newValue = { 
        'gender' : gender
        }

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

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

4

2 回答 2

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 )
于 2012-08-20T22:29:54.660 回答
0

如果您不想替换整个文档,则应使用$set运算符:

db.users.update( { '_id': user['_id'] }, { '$set': newValue }, False )
于 2012-08-20T21:13:05.303 回答