始める無料で始める

bulk_write() を使う

動画で見たように、.bulk_write() では次のようないくつかの操作をまとめて実行できます。

  • InsertOne()
  • UpdateOne() / UpdateMany() / ReplaceOne()
  • DeleteOne() / DeleteMany()
  • ReplaceOne()

いま、映画データベースの春の大掃除をしており、これらの操作が役立ちます。

まず、評価が高くオスカー受賞歴のある作品をホームページで "featured" としてフラグ付けしたいという要望があります。次に、情報をすっきりさせるため、古い年代に公開された映画は削除するよう指示されています。

この2つの変更を、1つの .bulk_write() 操作にまとめて同時に実行します。

この演習はコースの一部です

Pythonで学ぶMongoDB入門

コースを見る

演習の手順

  • operations の最初の操作を完成させ、評価が 8.0 以上 かつ オスカー受賞歴がある映画をすべて更新し、これらの映画に新しいフィールド "featured"True に設定します。
  • operations の2つ目の操作を完成させ、1980 年より前に公開された映画をすべて削除します。
  • mov に対して .bulk_write() を実行し、結果を res に保存します。
  • 変更されたドキュメント数と、削除されたドキュメント数を出力します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

from pymongo import UpdateMany, DeleteMany

operations = [
  	# Set featured to True for all movies with rating > 8 that won oscar
  	____(
    	{ "rating" : { ____: ____}, "won_oscar": ____ },
    	{ "$set": { ____: ____} }
  	),
  	# Remove all movies with release_year before 1980
  	____(
   		{ "release_year": { ____: ____} }
  	)
]                 

# Perform bulk write
res = mov.____

# Print out counts
print(res.____)
print(res.____)
コードを編集して実行