Overview
このガイドでは、 MongoDB PHPライブラリを使用して、削除操作を実行し、 MongoDBコレクションからドキュメントを削除する方法を学習できます。
削除操作は、MongoDB コレクションから 1 つ以上のドキュメントを削除します。 削除操作は、 MongoDB\Collection::deleteOne()またはMongoDB\Collection::deleteMany()メソッドを使用して実行できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurantsデータベースのrestaurantsコレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Clientをインスタンス化し、次の値を$collection変数に割り当てます。
$collection = $client->sample_restaurants->restaurants;
MongoDB配置を作成し、サンプルデータセットをロードする方法については、MongoDBの使用開始ガイドを参照してください。
削除操作
次の方法を使用して削除操作を実行できます。
MongoDB\Collection::deleteOne()は、検索条件に一致する最初のドキュメントを削除します。MongoDB\Collection::deleteMany()は、検索条件に一致するすべてのドキュメントを削除します
各削除メソッドにはクエリフィルタードキュメントが必要です。このドキュメントは、削除対象として選択するドキュメントを決定するための検索条件を指定します。 クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。
単一ドキュメントの削除
次の例では、 deleteOne()メソッドを使用して、 nameの値が'Ready Penny Inn'であるrestaurantsコレクション内のドキュメントを削除します。
$collection->deleteOne(['name' => 'Ready Penny Inn']);
複数のドキュメントの削除
次の例では、 deleteMany()メソッドを使用して、 boroughの値が'Brooklyn'であるrestaurantsコレクション内のすべてのドキュメントを削除します。
$collection->deleteMany(['borough' => 'Brooklyn']);
削除操作の変更
オプション値を指定する配列をパラメーターとして渡すことで、 MongoDB\Collection::deleteOne()メソッドとMongoDB\Collection::deleteMany()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションについて説明しています。
オプション | 説明 |
|---|---|
| |
| 操作の書込み保証 (write concern)を設定します。 このオプションはデフォルトで、コレクションの書込み保証 (write concern)になります。 詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。 |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
| 操作の読みやすさを向上させるために、 の値のリストを含むドキュメントを指定します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
| 操作に関連付けるクライアントセッションを指定します。 詳細については、 MongoDB Serverマニュアルの「 セッション 」を参照してください。 |
| 操作にコメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「削除コマンド フィールドのガイド」を参照してください。 |
照合
操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。
次の表では、照合を構成するために設定できるフィールドについて説明しています。
フィールド | 説明 |
|---|---|
| (必須)Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」 |
| (任意)大文字と小文字の比較を含めるかどうかを指定します。 |
|
|
| (任意) ICU |
| (任意)ドライバーが数字の string を数値として比較するかどうかを指定します。 |
|
|
| (任意) |
| (任意)発音区別符号を含む string を、string |
照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。
例
次の例では、 deleteMany()メソッドを呼び出して、 name値に string 'Mongo'が含まれるrestaurantsコレクション内のすべてのドキュメントを削除します。 また、配列パラメータのcommentオプションを設定して、操作にコメントを追加します。
$collection->deleteMany( ['name' => new MongoDB\BSON\Regex('Mongo')], ['comment' => 'Deleting Mongo restaurants'], );
注意
前述の例でdeleteMany()メソッドをdeleteOne()に置き換えると、ライブラリはname値に'Mongo'を含む最初のドキュメントのみを削除します。
戻り値
MongoDB\Collection::deleteOne()メソッドとMongoDB\Collection::deleteMany()メソッドはMongoDB\DeleteResultオブジェクトを返します。 このクラスには、次のメンバー関数が含まれています。
isAcknowledged()は、操作が確認されたかどうかを示すブール値を返します。getDeletedCount()は、削除されたドキュメントの数を返します。 書込み (write)操作が確認されなかった場合、このメソッドはエラーをスローします。
クエリフィルターがどのドキュメントにも一致しない場合、ドライバーはドキュメントを削除せず、 getDeletedCount()は0を返します。
例
次の例では、 deleteMany()メソッドを呼び出して、 cuisineの値が'Greek'であるドキュメントを削除します。 次に、 getDeletedCount()ノード関数を呼び出して、削除されたドキュメント数を出力します。
$result = $collection->deleteMany(['cuisine' => 'Greek']); echo 'Deleted documents: ', $result->getDeletedCount(), PHP_EOL;
Deleted documents: 111
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。