db.collection.remove()
定義
db.collection.remove()
コレクションからドキュメントを削除します。
次の値を返します。 操作のステータスを含むWriteResultオブジェクト。
構文
db.collection.remove()
メソッドは 2 つの構文のいずれかを指定できます。 remove()
メソッドは、クエリ ドキュメントと任意のjustOne
ブール値を取ることができます。
db.collection.remove( <query>, <justOne> )
または、このメソッドはクエリ ドキュメントと任意の削除オプション ドキュメントを受け入れることができます。
バージョン 5.0 での変更。
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document>, let: <document> // Added in MongoDB 5.0 } )
remove()
メソッドは次のパラメーターを取ります。
Parameter | タイプ | 説明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ドキュメント | クエリ演算子を使用して削除条件を指定します。コレクション内のすべてのドキュメントを削除するには、空のドキュメント( | ||||||||||
| ブール値 | 任意。削除を 1 つのドキュメントのみに制限するには、 | ||||||||||
| ドキュメント | 任意。 書込み保証(書込み保証 (write concern)を表現するドキュメント。省略すると、デフォルトの書込み保証 (write concern)が使用されます。 詳しくは、 書込み保証(write concern) を参照してください。 トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。 | ||||||||||
| ドキュメント | 任意。 操作に使用する照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。
照合を指定する場合、 照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合( コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。 | ||||||||||
ドキュメント | 任意。.. include:: /includes/let-variables-syntax.rst .. include:: /includes/let-variables-syntax-note.rst
バージョン 5.0 で追加 |
動作
書込み保証 (write concern)
remove()
メソッドは、デフォルトの書込み保証(write concern)を使用する delete
コマンドを使用します。デフォルト以外の書込み保証を指定するには、オプション パラメーターに書込み保証を含めます。
クエリの考慮事項
デフォルトでは、 remove()
はquery
式に一致するすべてのドキュメントを削除します。 操作を 1 つのドキュメントの削除に制限するには、 justOne
オプションを指定します。 指定した順序でソートされた単一のドキュメントを削除するには、 findAndModify()メソッドを使用します。
複数のドキュメントを削除する場合、削除操作がコレクションへの他の読み取り操作や書込み操作とインターリーブすることがあります。
時系列コレクション
シャーディングされたコレクション
justOne: true
オプションを指定するシャーディングされたコレクションに対して remove()
操作を使用するには次のようにします。
1つのシャードのみをターゲットにする場合は、クエリ仕様で部分的なシャードキーを使用するか、
クエリ仕様でシャードキーまたは
_id
フィールドを指定できます。
トランザクション
db.collection.remove()
は分散トランザクション内で使用できます。
トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
例
以下はremove()
メソッドの例です。
コレクションからのすべてのドキュメントの削除
コレクション内のすべてのドキュメントを削除するには、空のクエリ ドキュメント{}
を指定してremove
メソッドを呼び出します。 次の操作を実行すると、 bios コレクションからすべてのドキュメントが削除されます。
db.bios.remove( { } )
この操作は drop()
メソッドと同等ではありません。
コレクションからすべてのドキュメントを削除するには、drop()
メソッドを使用してインデックスを含むコレクション全体を削除してから、コレクションを再度作成してインデックスを再構築する方が効率的な場合があります。
条件に一致するすべてのドキュメントの削除
削除条件に一致するドキュメントを削除するには、 <query>
パラメータを指定してremove()
メソッドを呼び出します。
以下の操作は、qty
が 20
より大きいコレクション products
からすべてのドキュメントを削除します。
db.products.remove( { qty: { $gt: 20 } } )
デフォルトの書込み保証 (write concern) の上書き
レプリカセットに次の操作を適用すると、qty
が 20
を超えるすべてのドキュメントがコレクション products
から削除され、w: 2
の書込み保証(write concern) が wtimeout
5,000 ミリ秒に指定されます。この操作は、書き込み (write) がプライマリと 1 つのセカンダリの両方に伝達された後に戻されるか、5 秒後にタイムアウトします。
db.products.remove( { qty: { $gt: 20 } }, { writeConcern: { w: "majority", wtimeout: 5000 } } )
条件に一致する単一ドキュメントの削除
削除条件に一致する最初のドキュメントを削除するには、 query
条件とjustOne
パラメータをtrue
または1
に設定してremove
メソッドを呼び出します。
次の操作は、qty
が 20
より大きいコレクション products
から最初のドキュメントを削除します。
db.products.remove( { qty: { $gt: 20 } }, true )
照合の指定
照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。
コレクション myColl
は、次のドキュメントを含みます。
{ _id: 1, category: "café", status: "A" } { _id: 2, category: "cafe", status: "a" } { _id: 3, category: "cafE", status: "a" }
次の操作には照合オプションが含まれます。
db.myColl.remove( { category: "cafe", status: "A" }, { collation: { locale: "fr", strength: 1 } } )
変数の使用 let
バージョン 5.0 で追加
コマンド内の他の場所からアクセスできる変数を定義するには let オプションを使用します。
注意
変数を使用して結果をフィルタリングするには、$expr
演算子内の変数にアクセスする必要があります。
コレクション cakeFlavors
を以下ように作成します。
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
次の例では、let
で targetFlavor
変数を定義し、その変数を使用してストロベリー ケーキのフレーバーを削除します。
db.cakeFlavors.remove( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { let : { targetFlavor: "strawberry" } } )
WriteResult
正常な結果
remove()
は、操作のステータスを含むWriteResult()
オブジェクトを返します。 成功すると、 WriteResult()
オブジェクトには削除されたドキュメント数に関する情報が含まれます。
WriteResult({ "nRemoved" : 4 })
以下も参照してください。
書込み保証 (write concern) エラー
remove()
メソッドで書込み保証 (write concern) が発生した場合、結果にはWriteResult.writeConcernError
フィールドが含まれます。
WriteResult({ "nRemoved" : 7, "writeConcernError" : { "code" : 64, "codeName" : "WriteConcernTimeout", "errmsg" : "waiting for replication timed out", "errInfo" : { "wtimeout" : true, "writeConcern" : { "w" : "majority", "wtimeout" : 1, "provenance" : "getLastErrorDefaults" } } } })
以下も参照してください。
書込み保証 (write concern) とは関係のないエラー
remove()
メソッドで書込み保証(write concern)エラーが発生した場合、結果にはWriteResult.writeError
フィールドが含まれます。
WriteResult({ "nRemoved" : 0, "writeError" : { "code" : 2, "errmsg" : "unknown top level operator: $invalidFieldName" } })