2012-08-20 3 views
0

Je suis récupérer un document comme celui-ci:Comment mettre à jour un document déjà récupéré?

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

Mais je ne peux pas comprendre comment mettre à jour le document si je souhaite modifier la valeur de « genre ». Cela ne fonctionne pas:

newValue = { 
     'gender' : gender 
     } 

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

Ma syntaxe est incorrecte? Quelle est la meilleure façon de mettre à jour l'utilisateur

Répondre

4

Votre syntaxe de mise à jour n'est pas correcte, il devrait être:

update(spec, document, upsert=False, multi=False, ...) 

spec est le même filtre que vous avez utilisé pour la découverte, à savoir { '_id' : ObjectId('anID') }

vous pouvez mettre à jour le d remplacez-le par un document modifié ou utilisez une mise à jour ciblée pour modifier uniquement une certaine valeur. L'avantage de la mise à jour ciblée est qu'elle vous permet d'économiser le premier aller-retour sur le serveur pour obtenir le document utilisateur.

mise à jour de remplacement:

user = db.users.find_one({ '_id' : ObjectId('anID') }) 
user['gender'] = newGender 
db.users.update({ '_id' : user['_id'] }, user, False) 

ciblée mise à jour:

db.users.update({ '_id' : ObjectId('anID') }, \ 
       { '$set': { 'gender' : newGender } }, False) 
0

Si vous ne souhaitez pas remplacer tout le document, vous devez utiliser l'opérateur $set comme:

db.users.update({ '_id': user['_id'] }, { '$set': newValue }, False) 
Questions connexes