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.____)