Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

db.collection.remove()

項目一覧

  • 定義
  • 構文
  • 動作
  • WriteResult

重要

非推奨の mongosh メソッド

このメソッドは mongoshでは非推奨です。 別のメソッドについては、「レガシーmongo shellとの互換性の変更 」を参照してください。

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
タイプ
説明

query

ドキュメント

クエリ演算子を使用して削除条件を指定します。コレクション内のすべてのドキュメントを削除するには、空のドキュメント({})を渡します。

justOne

ブール値

任意。削除を 1 つのドキュメントのみに制限するには、true に設定します。省略するとデフォルト値の false が使用され、削除条件に一致するすべてのドキュメントが削除されます。

writeConcern

ドキュメント

任意。 書込み保証(書込み保証 (write concern)を表現するドキュメント。省略すると、デフォルトの書込み保証 (write concern)が使用されます。 詳しくは、 書込み保証(write concern) を参照してください。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

collation

ドキュメント

任意。

操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

ドキュメント

任意。.. include:: /includes/let-variables-syntax.rst .. include:: /includes/let-variables-syntax-note.rst

letと変数を使用した完全な例については、「 における変数の使用 let」を参照してください。

バージョン 5.0 で追加

remove() メソッドは、デフォルトの書込み保証(write concern)を使用する delete コマンドを使用します。デフォルト以外の書込み保証を指定するには、オプション パラメーターに書込み保証を含めます。

デフォルトでは、 remove()query式に一致するすべてのドキュメントを削除します。 操作を 1 つのドキュメントの削除に制限するには、 justOneオプションを指定します。 指定した順序でソートされた単一のドキュメントを削除するには、 findAndModify()メソッドを使用します。

複数のドキュメントを削除する場合、削除操作がコレクションへの他の読み取り操作や書込み操作とインターリーブすることがあります。

remove()時系列コレクション では メソッドは使用できません。

justOne: true オプションを指定するシャーディングされたコレクションに対して remove() 操作を使用するには次のようにします。

  • 1つのシャードのみをターゲットにする場合は、クエリ仕様で部分的なシャードキーを使用するか、

  • クエリ仕様でシャードキーまたは _id フィールドを指定できます。

db.collection.remove()分散トランザクション内で使用できます。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

重要

ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。

トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。

以下はremove()メソッドの例です。

コレクション内のすべてのドキュメントを削除するには、空のクエリ ドキュメント{}を指定してremoveメソッドを呼び出します。 次の操作を実行すると、 bios コレクションからすべてのドキュメントが削除されます。

db.bios.remove( { } )

この操作は drop() メソッドと同等ではありません。

コレクションからすべてのドキュメントを削除するには、drop() メソッドを使用してインデックスを含むコレクション全体を削除してから、コレクションを再度作成してインデックスを再構築する方が効率的な場合があります。

削除条件に一致するドキュメントを削除するには、 <query>パラメータを指定してremove()メソッドを呼び出します。

以下の操作は、qty20 より大きいコレクション products からすべてのドキュメントを削除します。

db.products.remove( { qty: { $gt: 20 } } )

レプリカセットに次の操作を適用すると、qty20 を超えるすべてのドキュメントがコレクション 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メソッドを呼び出します。

次の操作は、qty20 より大きいコレクション 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 } }
)

バージョン 5.0 で追加

コマンド内の他の場所からアクセスできる変数を定義するには let オプションを使用します。

注意

変数を使用して結果をフィルタリングするには、$expr 演算子内の変数にアクセスする必要があります。

コレクション cakeFlavors を以下ように作成します。

db.cakeFlavors.insertMany( [
{ _id: 1, flavor: "chocolate" },
{ _id: 2, flavor: "strawberry" },
{ _id: 3, flavor: "cherry" }
] )

次の例では、lettargetFlavor 変数を定義し、その変数を使用してストロベリー ケーキのフレーバーを削除します。

db.cakeFlavors.remove(
{ $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
{ let : { targetFlavor: "strawberry" } }
)

remove()は、操作のステータスを含むWriteResult()オブジェクトを返します。 成功すると、 WriteResult()オブジェクトには削除されたドキュメント数に関する情報が含まれます。

WriteResult({ "nRemoved" : 4 })

以下も参照してください。

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"
}
}
}
})

以下も参照してください。

remove()メソッドで書込み保証(write concern)エラーが発生した場合、結果にはWriteResult.writeErrorフィールドが含まれます。

WriteResult({
"nRemoved" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "unknown top level operator: $invalidFieldName"
}
})

戻る

db.collection.reIndex