AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

Update Documents

このガイドでは、PyMongo を使用して メソッドまたは メソッドを使用して MongoDBupdate_one() update_many()コレクション内のドキュメントを更新する方法を学習できます。

このガイドの例では、 Atlas サンプル データセットsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 PyMongo を使い始める 」チュートリアルを参照してください。

MongoDB では、次の方法で更新操作を実行できます。

  • update_one()は、検索条件に一致する最初のドキュメントを更新します。

  • update_many()は、検索条件に一致するすべてのドキュメントを更新します

各更新方法には次のパラメーターが必要です。

  • アップデートするドキュメントを決定するクエリフィルタードキュメント 。 クエリフィルターの詳細については、 マニュアルの「 クエリフィルター ドキュメントMongoDB Server 」セクション を参照してください。

  • 更新演算子(実行する更新の種類)と変更する必要があるフィールドと値を指定する更新ドキュメント。 更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「 フィールド更新演算子 」のガイドページ を参照してください。

次の例では、update_one() メソッドを使用して、restaurantsコレクション内の "Bagels N Buns" という名前のドキュメントの name 値を更新します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

restaurants = database["restaurants"]
query_filter = {'name' : 'Bagels N Buns'}
update_operation = { '$set' :
{ 'name' : '2 Bagels 2 Buns' }
}
result = restaurants.update_one(query_filter, update_operation)
restaurants = database["restaurants"]
query_filter = {'name' : 'Bagels N Buns'}
update_operation = { '$set' :
{ 'name' : '2 Bagels 2 Buns' }
}
result = await restaurants.update_one(query_filter, update_operation)

次の例では、update_many() メソッドを使用して、cuisine の値が "Pizza" であるすべてのドキュメントを更新します。更新後、ドキュメントの cuisine 値は "Pasta" になります。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

restaurants = database["restaurants"]
query_filter = {'cuisine' : 'Pizza'}
update_operation = { '$set' :
{ 'cuisine' : 'Pasta' }
}
result = restaurants.update_many(query_filter, update_operation)
restaurants = database["restaurants"]
query_filter = {'cuisine' : 'Pizza'}
update_operation = { '$set' :
{ 'cuisine' : 'Pasta' }
}
result = await restaurants.update_many(query_filter, update_operation)

オプションで、 update_one()メソッドとupdate_many()メソッドは、更新操作を構成するために使用できるオプションを表す追加のパラメーターを受け入れます。 追加のオプションを指定しない場合、ドライバーは更新操作をカスタマイズしません。

プロパティ
説明

upsert

クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。デフォルトは
False

bypass_document_validation

アップデート操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
Falseです。

collation

結果をソートするときに使用する言語照合の種類を指定します。詳細については、照合を参照してください。

array_filters

アップデートを適用する配列要素を指定するフィルターのリスト。

hint

ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。

session

ClientSessionのインスタンス。

let

パラメーター名と値のマップ。 値は、ドキュメント フィールドを参照しない定数または閉じた式である必要があります。 詳細については、MongoDB Server マニュアルのlet ステートメントを参照してください。

comment

操作に添付するコメント。 詳細については、MongoDB Server マニュアルの 「挿入コマンド フィールドガイド」 を参照してください。

次のコードでは、update_many() メソッドを使用して、boroughフィールドの値が "Manhattan" であるすべてのドキュメントを検索します。次に、これらのドキュメントの borough の値を "Manhattan (north)" にアップデートします。upsert オプションが True に設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、 PyMongo は新しいドキュメントを挿入します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

restaurants = database["restaurants"]
query_filter = {'borough' : 'Manhattan'}
update_operation = { '$set' :
{ 'borough' : 'Manhattan (north)' }
}
result = restaurants.update_many(query_filter, update_operation, upsert = True)
restaurants = database["restaurants"]
query_filter = {'borough' : 'Manhattan'}
update_operation = { '$set' :
{ 'borough' : 'Manhattan (north)' }
}
result = await restaurants.update_many(query_filter, update_operation, upsert = True)

更新操作を実行するときに、ドライバーが使用する 照合 を指定できます。

照合は、大文字と小文字やアクセント記号など、string を比較するための言語固有のルールのセットです。

照合を指定するには、CollationクラスまたはPython辞書のインスタンスを作成します。Collation コンストラクターに渡すオプション、または辞書のキーとして含めるオプションのリストについては、 MongoDB Serverマニュアルの 照合 を参照してください。

Tip

照合のインポート

Collationクラスのインスタンスを作成するには、pymongo.collation からインポートする必要があります。

次の例では、 前の例と同じアップデート操作を実行しますが、デフォルトの照合は fr_CA です。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

from pymongo.collation import Collation
restaurants = database["restaurants"]
query_filter = {'cuisine' : 'Pizza'}
update_operation = { '$set' :
{ 'cuisine' : 'Pasta' }
}
result = restaurants.update_many(query_filter, update_operation,
collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation
restaurants = database["restaurants"]
query_filter = {'cuisine' : 'Pizza'}
update_operation = { '$set' :
{ 'cuisine' : 'Pasta' }
}
result = await restaurants.update_many(query_filter, update_operation,
collation=Collation(locale='fr_CA'))

注意

操作照合がデフォルトを上書き

操作の一部として照合を指定すると、コレクションのデフォルトの照合が上書きされます。

update_one()メソッドとupdate_many()メソッドはそれぞれUpdateResultオブジェクトを返します。 UpdateResult型には次のプロパティが含まれています。

プロパティ
説明

matched_count

アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数。

modified_count

更新操作によって変更されたドキュメントの数。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。

raw_result

サーバーによって返された未加工の結果ドキュメント。

upserted_id

ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 それ以外の場合はNoneです。

クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。