Overview
このガイドでは、 MongoDB PHPライブラリを使用してMongoDBコレクションに対して置換操作を実行する方法を学習できます。 置換操作は 更新操作とは異なります。 アップデート操作により、ターゲットドキュメント内の指定されたフィールドのみが変更されます。 置換操作により、ターゲットドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。
ドキュメントを置き換えるには、 MongoDB\Collection::replaceOne()メソッドを使用します。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurantsデータベースのrestaurantsコレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Clientをインスタンス化し、次の値を$collection変数に割り当てます。
$collection = $client->sample_restaurants->restaurants;
MongoDB配置を作成し、サンプルデータセットをロードする方法については、MongoDBの使用開始ガイドを参照してください。
置換操作
MongoDB\Collection::replaceOne()を使用して置換操作を実行できます。 このメソッドは、検索条件に一致する最初のドキュメントから_idフィールドを除くすべてのフィールドを削除します。 次に、指定したフィールドと値がドキュメントに挿入されます。
必要なパラメーター
replaceOne() メソッドには次のパラメーターが必要です。
クエリフィルタードキュメント。置き換えるドキュメントを決定します。 クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。
新しいドキュメントに挿入するフィールドと値を指定するドキュメントを置き換えます。
戻り値
replaceOne()メソッドはMongoDB\UpdateResultオブジェクトを返します。 MongoDB\UpdateResult型には次のメソッドが含まれています。
方式 | 説明 |
|---|---|
| アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数を返します。 |
| 更新操作によって変更されたドキュメントの数を返します。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。 |
| データベースにアップサートされたドキュメントの数を返します(存在する場合)。 |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのIDを返します。 |
| サーバーが書込み (write)操作を確認したかどうかを示すブール値を返します。 |
例
次の例では、 replaceOne()メソッドを使用して、 nameフィールド値が'Pizza Town'であるドキュメントのフィールドと値を置き換えます。 次に、変更されたドキュメントの数を出力します。
$replaceDocument = [ 'name' => 'Mongo\'s Pizza', 'cuisine' => 'Pizza', 'address' => [ 'street' => '123 Pizza St', 'zipCode' => '10003', ], 'borough' => 'Manhattan', ]; $result = $collection->replaceOne(['name' => 'Pizza Town'], $replaceDocument); echo 'Modified documents: ', $result->getModifiedCount();
Modified documents: 1
重要
_idフィールドの値は不変です。 置き換えドキュメントで_idフィールドに値が指定される場合は、既存のドキュメントの_id値と一致する必要があります。
置換操作の変更
オプション値を指定する配列をパラメーターとして渡すことで、 MongoDB\Collection::replaceOne()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションの一部を説明しています。
オプション | 説明 |
|---|---|
| クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。デフォルトは |
| 置換操作がドキュメントの検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを存在する場合に置き換えることができます。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは |
| 置換操作を実行する前にドキュメントに適用するソート順序を指定します。 |
| |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
| 操作に関連付けるクライアントセッションを指定します。 |
| 操作の読みやすさを向上させるために、 の値のリストを含むドキュメントを指定します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
| 操作にコメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。 |
照合
操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。
次の表では、照合を構成するために設定できるフィールドについて説明しています。
フィールド | 説明 |
|---|---|
| (必須)Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」 |
| (任意)大文字と小文字の比較を含めるかどうかを指定します。 |
|
|
| (任意) ICU |
| (任意)ドライバーが数字の string を数値として比較するかどうかを指定します。 |
|
|
| (任意) |
| (任意)発音区別符号を含む string を、string |
照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。
例
次のコードでは、 replaceOne()メソッドを使用して、 nameフィールドの値が'Food Town'である最初のドキュメントを検索し、このドキュメントをnameの値が'Food World'である新しいドキュメントに置き換えます。 upsertオプションがtrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、ライブラリは新しいドキュメントを挿入します。
$replaceDocument = [ 'name' => 'Food World', 'cuisine' => 'Mixed', 'address' => [ 'street' => '123 Food St', 'zipCode' => '10003', ], 'borough' => 'Manhattan', ]; $result = $collection->replaceOne( ['name' => 'Food Town'], $replaceDocument, ['upsert' => true], );
詳細情報
アップデート操作の詳細については、ドキュメントのアップデートガイドを参照してください。
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。