2012-12-07 7 views
0

J'ai un db avec un tas de collections.Ajoute une valeur de clé si la collection mongodb n'a pas la valeur?

Certains d'entre eux ont le «statut» et d'autres non.

Comment puis-je insérer 'status': 'pending' dans les collections dépourvues de 'status' - mais pas écraser les collections qui ont déjà un statut?

En utilisant pymongo/flacon/python 2.7

J'ai essayé ceci:

orders = monDB.find('order') 

for order in orders: 
    if not order['status']: 
     monDB.update('order', {'status':'pending'}) 
     print 'success' 

Mais rien ne se passe. Qu'est-ce que je fais mal?

Répondre

1

Utilisez $ exists pour vérifier si le champ existe et $ set pour le créer s'il ne l'est pas. En supposant monDB est votre collection:

monDB.update({'status': {'$exists' : False}}, {'$set' : {'status': 'pending'}}, multi=True) 

Dans le shell mongo:

> db.myQueue.update({status: {$exists: false}}, {$set : {status: 'pending'}}, false, true) 

Voir http://docs.mongodb.org/manual/reference/operators/ et http://docs.mongodb.org/manual/applications/update/#crud-update-update.

+0

Pourriez-vous me dire comment faire cela avec mongo cli? Pour une raison quelconque, je ne peux pas le faire avec le wrapper pymongo que l'un des développeurs utilise –

+1

Bien sûr, ajouté un exemple de mise à jour de tous les documents sans statut dans la collection "myQueue". – kristina

Questions connexes