Docs Menu

Docs Homeアプリケーションの開発Python ドライバーPyMongo

Update Documents

項目一覧

  • Overview
  • サンプル データ
  • アップデート操作
  • 1 つのドキュメントの更新
  • 多くのドキュメントの更新
  • 更新操作をカスタマイズする
  • 戻り値
  • 詳細情報
  • API ドキュメント

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

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

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

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

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

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

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

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

次の例では、 update_one()メソッドを使用して、 restaurantsコレクション内の"Bagels N Buns"という名前のドキュメントのname値を更新します。

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)

次の例では、 update_many()メソッドを使用して、 cuisineの値が"Pizza"であるすべてのドキュメントを更新します。 更新後、ドキュメントのcuisine値は"Pasta"になります。

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

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

プロパティ
説明
upsert
Specifies whether the update operation performs an upsert operation if no documents match the query filter. For more information, see the upsert statement in the MongoDB Server manual.
Defaults to False
bypass_document_validation
Specifies whether the update operation bypasses document validation. This lets you update documents that don't meet the schema validation requirements, if any exist. For more information about schema validation, see Schema Validation in the MongoDB Server manual.
Defaults to False.
collation
Specifies the kind of language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.
array_filters
A list of filters that specifies which array elements an update applies to.
hint
Gets or sets the index to scan for documents. For more information, see the hint statement in the MongoDB Server manual.
session
An instance of ClientSession.
let
A Map of parameter names and values. Values must be constant or closed expressions that don't reference document fields. For more information, see the let statement in the MongoDB Server manual.
comment
A comment to attach to the operation. For more information, see the insert command fields guide in the MongoDB Server manual for more information.

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

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

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

プロパティ
説明
matched_count
The number of documents that matched the query filter, regardless of how many were updated.
modified_count
The number of documents modified by the update operation. If an updated document is identical to the original, it is not included in this count.
raw_result
The raw result document returned by the server.
upserted_id
The ID of the document that was upserted in the database, if the driver performed an upsert. Otherwise None.

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

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

← ドキュメントの挿入