Overview
このガイドでは、PyMongo を使用して MongoDB コレクション内のドキュメントに対して置換操作を実行する方法を学習します。 置換操作は更新操作とは異なります。 アップデート操作により、ターゲット ドキュメント内の指定されたフィールドのみが変更されます。 置換操作により、ターゲット ドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。
アップデート操作の詳細については、ドキュメントのアップデート ガイドを参照してください。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 PyMongo を使い始める 」チュートリアルを参照してください。
置換操作
MongoDB では、 replace_one()メソッドを使用して置換操作を実行できます。 このメソッドは、検索条件に一致する最初のドキュメントから_idフィールドを除くすべてのフィールドを削除します。 その後、指定したフィールドと値がドキュメントに挿入されます。
必要なパラメーター
replace_one() メソッドには次のパラメーターが必要です。
置換ドキュメント。新しいドキュメントに挿入するフィールドと値を指定します。
replaceOne
次の例では、 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()メソッドは追加のパラメーターを受け入れます。これらのパラメーターは、置換操作を構成するために使用できるオプションを表します。 追加のオプションを指定しない場合、ドライバーは置換操作をカスタマイズしません。
プロパティ | 説明 |
|---|---|
| クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。デフォルトは |
| 置換操作がドキュメントの検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを存在する場合に置き換えることができます。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは |
| 結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。 |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
|
|
| パラメーター名と値のマップ。 値は、ドキュメント フィールドを参照しない定数または閉じた式である必要があります。 詳細については、MongoDB Server マニュアルのlet ステートメントを参照してください。 |
| 操作に添付するコメント。 詳細については、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型には次のプロパティが含まれています。
プロパティ | 説明 |
|---|---|
| アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数。 |
| 更新操作によって変更されたドキュメントの数。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。 |
| サーバーによって返された未加工の結果ドキュメント。 |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 それ以外の場合は |
詳細情報
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。