2017-09-27 2 views
1

Je suis en train de mettre à jour une collection dans MongoDB après avoir fait une analyse à l'aide Pandas, voici mon code:Comment puis-je mettre à jour une collection entière dans MongoDB et non document par document?

client=MongoClient() 
db=client.database 
cll=db.collection 

cursor=cll.find() 
df=pd.DataFrame(list(cursor)) 

df['new_field'] = df['existing_field_A'].apply(lambda x: personalized_function(x)) 

for index, row in df.iterrows(): 
    _id=row['_id'] 
    new_value=row['new_field'] 
    cll.update_one({'_id':_id}, {'$set':{'new_field':new_value}}) 

Le code fonctionne très bien, mais il prend trop de temps. J'aimerais savoir s'il existe une meilleure façon de mettre à jour ma collection.

Répondre

1

Vous pouvez utiliser unordered-bulk-write-operations et mettre à jour tous les documents dans un seul lot. Cela permettra d'améliorer la performance.

bulk_update = cll.initialize_unordered_bulk_op() 
    for index, row in df.iterrows(): 
     _id=row['_id'] 
     new_value=row['new_field'] 
     bulk_update.find({'_id':_id}).update_one({'$set'{'new_field':new_value}}) 
    bulk_update.execute() 
+0

Merci beaucoup! Cela améliore vraiment les performances. – Ricardo08

+0

Utilisez le signe deux-points (:) après le mot-clé $ set. –