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 に答える