2016-11-07 4 views
4

ドキュメントが存在する場合は更新し、コレクションに存在しない場合は挿入しています。 _idに基づいて、私はパンダのデータフレームレコードを文書としてコレクションに挿入しています。新しい文書の挿入は正常ですが、古い文書のフィールドの更新は機能していません。バルクアップセートが機能しないpymongo

bulk = pymongo.bulk.BulkOperationBuilder(pros_rides,ordered=False) 
for doc in bookings_df: 
    bulk.find({ "_id": doc["_id"] }).upsert().update({ 
     "$setOnInsert": doc 
    }) 
response = bulk.execute() 

どうすればよいですか?

+0

あなたは*動作していないことで何を意味していますか*? – styvane

+0

@Styvane upsertをやっているうちに、新しいレコードが来たら挿入しますが、古いレコードが来たらドキュメントは更新されません。 –

答えて

5

upsertは、ドキュメントを更新または挿入することができます。 "$ setOnInsert"操作は、文書が挿入されたときにのみ実行され、は更新されず、に更新されます。ドキュメントが存在する場合は更新するために、ドキュメントが更新されたときに実行されるいくつかの操作を提供する必要があります。

は、この代わりのようなものを試してみてください:

bulk = pros_rides.initialize_unordered_bulk_op() 
for doc in books_df: 
    bulk.find({'_id': doc['_id']}).upsert().replace_one(doc) 

bulk.execute() 
+0

@Deepak selva、['Bulk()'](https://docs.mongodb.com/manual/release-notes/3.2/#mongo-shell-and-crud-api)は、関連するメソッドで非推奨になります['bulk_write()'](http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.bulk_write)メソッド – styvane

+0

を提供するMongoDB 3.2では、@ Deepak-セルヴァには何か他に助けてくれるものがありますか、あるいはこの答えを正しいものとして受け入れるでしょうか? –

+0

@A.JesseJiryuDavisありがとうございました。これは私の時間を節約しました。 –

関連する問題