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

ドキュメントの置換

このガイドでは、PyMongo を使用して MongoDB コレクション内のドキュメントに対して置換操作を実行する方法を学習します。 置換操作は更新操作とは異なります。 アップデート操作により、ターゲット ドキュメント内の指定されたフィールドのみが変更されます。 置換操作により、ターゲット ドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。

アップデート操作の詳細については、ドキュメントのアップデート ガイドを参照してください。

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

MongoDB では、 replace_one()メソッドを使用して置換操作を実行できます。 このメソッドは、検索条件に一致する最初のドキュメントから_idフィールドを除くすべてのフィールドを削除します。 その後、指定したフィールドと値がドキュメントに挿入されます。

replace_one() メソッドには次のパラメーターが必要です。

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

  • 置換ドキュメント。新しいドキュメントに挿入するフィールドと値を指定します。

次の例では、 replace_one()メソッドを使用して、ドキュメントのフィールドと値をnameフィールド値"Pizza Town"に置き換えます。

restaurants = database["restaurants"]
query_filter = {"name" : "Pizza Town"}
replace_document = { "name" : "Mongo's Pizza",
"cuisine" : "Pizza",
"address" : {
"street" : "123 Pizza St",
"zipCode" : "10003"
},
"borough" : "Manhattan"
}
result = restaurants.replace_one(query_filter, replace_document)

重要

_idフィールドの値は不変です。 置き換えドキュメントで_idフィールドに値が指定される場合は、既存のドキュメントの_id値と一致する必要があります。

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

プロパティ
説明

upsert

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

bypass_document_validation

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

collation

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

hint

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

session

ClientSessionのインスタンス。

let

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

comment

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

次のコードでは、 replace_one()メソッドを使用して、 nameフィールドの値が"Food Town"である最初のドキュメントを検索し、このドキュメントを"Food World"という名前の新しいドキュメントに置き換えます。 upsertオプションがTrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、ドライバーは新しいドキュメントを挿入します。

restaurants = database["restaurants"]
query_filter = {"name" : "Food Town"}
replace_document = { "name" : "Food World",
"cuisine" : "Mixed",
"address" : {
"street" : "123 Food St",
"zipCode" : "10003"
},
"borough" : "Manhattan"
}
result = restaurants.replace_one(query_filter, replace_document, upsert = True)

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

プロパティ
説明

matched_count

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

modified_count

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

raw_result

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

upserted_id

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

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

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