Overview
このガイドでは、 MongoDB PHPライブラリを使用してMongoDBコレクション内のドキュメントを更新する方法を学習できます。 単一のドキュメントを更新するにはMongoDB\Collection::updateOne()メソッドを、複数のドキュメントを更新するにはMongoDB\Collection::updateMany()メソッドを呼び出します。
サンプル データ
The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your PHP application, instantiate a MongoDB\Client that connects to an Atlas cluster and assign the following value to your $collection variable:
$collection = $client->sample_restaurants->restaurants;
無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。
アップデート操作
MongoDB では、次の方法で更新操作を実行できます。
MongoDB\Collection::updateOne()は、検索条件に一致する最初のドキュメントを更新します。MongoDB\Collection::updateMany()は、検索条件に一致するすべてのドキュメントを更新します
各更新方法には次のパラメーターが必要です。
クエリフィルタードキュメント: 更新するドキュメントを指定します。 クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。
ドキュメントの更新:更新演算子、または実行する更新の種類と、変更するフィールドと値を指定します。 更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「フィールド更新演算子 」のガイドを参照してください。
1 つのドキュメントの更新
次の例では、 updateOne()メソッドを使用して、 restaurantsコレクション内のドキュメントのname値を'Bagels N Buns'から'2 Bagels 2 Buns'に更新します。
$result = $collection->updateOne( ['name' => 'Bagels N Buns'], ['$set' => ['name' => '2 Bagels 2 Buns']], );
多くのドキュメントの更新
次の例では、 updateMany()メソッドを使用して、 cuisineの値が'Pizza'であるすべてのドキュメントを更新します。 更新後、ドキュメントのcuisine値は'Pasta'になります。
$result = $collection->updateMany( ['cuisine' => 'Pizza'], ['$set' => ['cuisine' => 'Pasta']], );
更新操作をカスタマイズする
オプション値を指定する配列をパラメーターとして渡すことで、 updateOne()メソッドとupdateMany()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションの一部を説明しています。
オプション | 説明 |
|---|---|
| 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. |
| 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. |
|
|
| |
| 操作で配列フィールドが変更される場合に、アップデートを適用する配列要素を指定します。 |
| ドキュメントをスキャンするインデックスを設定します。詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。 |
| Sets the write concern for the operation. For more information, see Write Concern in the MongoDB Server manual. |
| Specifies a document with a list of values to improve operation readability. 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. |
| 操作に添付するコメント。詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。 |
次の例では、 updateMany()メソッドを使用して、 boroughの値が'Manhattan'であるすべてのドキュメントを検索します。 次に、これらのドキュメントのborough値を'Manhattan (north)'にアップデートします。 upsertオプションがtrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、 MongoDB PHPライブラリは新しいドキュメントを挿入します。
$result = $collection->updateMany( ['borough' => 'Manhattan'], ['$set' => ['borough' => 'Manhattan (north)']], ['upsert' => true], );
照合
操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。
次の表では、照合を構成するために設定できるフィールドについて説明しています。
フィールド | 説明 |
|---|---|
| (Required) Specifies the International Components for Unicode (ICU) locale. For a list of supported locales, see Collation Locales and Default Parameters in the MongoDB Server manual. |
| (任意) 大文字と小文字の比較を含めるかどうかを指定します。 |
| (任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。 |
| (Optional) Specifies the level of comparison to perform, as defined in the ICU documentation. |
| (任意)ドライバーが数字の string を数値として比較するかどうかを指定します。 |
| (任意) ライブラリが空白と句読点を比較目的の基本文字として考慮するかどうかを指定します。 |
| (任意) |
| (任意) 発音区別符号を含む string を、string の後ろから前にソートするかどうかを指定します。 |
照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。
戻り値
updateOne()メソッドとupdateMany()メソッドはMongoDB\UpdateResultクラスのインスタンスを返します。 このクラスには、次のメンバー関数が含まれています。
関数 | 説明 |
|---|---|
| アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数を返します。 |
| 更新操作によって変更されたドキュメントの数を返します。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。 |
| 書込み (write)操作が確認されたかどうかを示すブール値を返します。 |
| データベースにアップサートされたドキュメントの数を返します。 |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのIDを返します。 |
次の例では、 updateMany()メソッドを使用して、一致するドキュメントのnameフィールドを'Dunkin' Donuts'から'Dunkin''にアップデートします。 変更されたドキュメントの数を出力するには、 getModifiedCount()メンバー関数を呼び出します。
$result = $collection->updateMany( ['name' => 'Dunkin\' Donuts'], ['$set' => ['name' => 'Dunkin\'']], ); echo 'Modified documents: ', $result->getModifiedCount();
詳細情報
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。