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

db.collection.deleteMany()

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
db.collection.deleteMany()

MongoDB とドライバー

このページではmongoshメソッドがドキュメントされています。 MongoDB ドライバーで同等のメソッドを確認するには、プログラミング言語の対応するページを参照してください。

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala

filter に一致するすべてのドキュメントをコレクションから削除します。

次の値を返します。次の要素を含むドキュメント:
  • acknowledgedtrue操作が 書込み保証( write concern )付きで実行された場合は としてブール値false (書込み保証が無効になっている場合は

  • deletedCount 削除されたドキュメントの数を含みます

注意

大きなコレクション内の全ドキュメントを削除する場合は、コレクションを削除して再作成する方が速い場合があります。コレクションを削除する前に、コレクションのすべてのインデックスに注意してください。元のコレクションに存在していたインデックスをすべて再作成する必要があります。元のコレクションがシャーディングされている場合は、再作成されたコレクションもシャーディングする必要があります。

コレクションの削除について詳しくは、db.collection.drop() を参照してください。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

deleteMany()メソッドの構文は次のとおりです。

db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
Parameter
タイプ
説明

ドキュメント

クエリ演算子を使用して削除条件を指定します。

コレクション内のすべてのドキュメントを削除するには、空のドキュメント形式({ })を渡します。

ドキュメント

任意。書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。

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

ドキュメント

任意。

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

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

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

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

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

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

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

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

バージョン 3.4 で追加

ドキュメント

任意。クエリ述語をサポートするために使用するインデックスを指定するドキュメントまたは string です。

このオプションには、インデックス仕様ドキュメントまたはインデックス名の文字列を指定できます。

存在しないインデックスを指定した場合、操作はエラーになります。

の例については、「 hint削除操作での の指定 」を参照してください。

db.collection.deleteMany() は 時系列コレクションで使用される場合、WriteError の例外をスローします。時系列コレクションからすべてのドキュメントを排除するには、db.collection.drop() を使用します。

単一ドキュメントを削除するには、代わりに db.collection.deleteOne() を使用します。

あるいは、_id などのユニークインデックスの構成フィールドを使用します。

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

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

重要

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

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

db.collection.deleteMany()はドキュメントを 1 つずつ削除します。 db.collection.deleteMany()操作中にプライマリ ノードが失敗した場合、セカンダリ ノードからまだ削除されていないドキュメントはコレクションから削除されません。

db.collection.deleteMany() 操作によって 1 つ以上のドキュメントが正常に削除されると、その操作によって削除された各ドキュメント用のエントリが oplog(操作ログ)に追加されます。操作が失敗した場合、または削除するドキュメントが見つからない場合は、その操作によって oplog にエントリが追加されることはありません。

orders コレクションには、次の構造を持つドキュメントがあります。

db.orders.insertOne(
{
_id: ObjectId("563237a41a4d68582c2509da"),
stock: "Brent Crude Futures",
qty: 250,
type: "buy-limit",
limit: 48.90,
creationts: ISODate("2015-11-01T12:30:15Z"),
expiryts: ISODate("2015-11-01T12:35:15Z"),
client: "Crude Traders Inc."
}
)

次の操作は、client : "Crude Traders Inc." のすべてのドキュメントを削除します。

try {
db.orders.deleteMany( { "client" : "Crude Traders Inc." } );
} catch (e) {
print (e);
}

この操作では以下が返されます。

{ "acknowledged" : true, "deletedCount" : 10 }

次の操作は、stock : "Brent Crude Futures" かつ limit48.88 より大きいすべてのドキュメントを削除します。

try {
db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );
} catch (e) {
print (e);
}

この操作では以下が返されます。

{ "acknowledged" : true, "deletedCount" : 8 }

3つのノードから成るレプリカセットにおいて、次の操作は wmajoritywtimeout100 を指定します。

try {
db.orders.deleteMany(
{ "client" : "Crude Traders Inc." },
{ writeConcern: { w : "majority", wtimeout : 100 }}
);
} catch (e) {
print (e);
}

確認応答にwtimeoutの制限を超える時間がかかると、次の例外が発生します。

WriteConcernError({
"code" : 64,
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 100,
"provenance" : "getLastErrorDefaults"
}
}
})

Tip

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

バージョン 3.4 で追加

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

コレクション restaurantsは、次のドキュメントを含みます。

db.restaurants.insertMany( [
{ _id: 1, category: "café", status: "A" },
{ _id: 2, category: "cafe", status: "a" },
{ _id: 3, category: "cafE", status: "a" }
] )

次の操作には照合オプションが含まれます。

db.restaurants.deleteMany(
{ category: "cafe", status: "A" },
{ collation: { locale: "fr", strength: 1 } }
)

mongosh で、次のドキュメントを含む members コレクションを作成します。

db.members.insertMany([
{ "_id" : 1, "member" : "abc123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" },
{ "_id" : 3, "member" : "lmn123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 4, "member" : "pqr123", "status" : "D", "points" : 20, "misc1" : "Deactivated", "misc2" : null },
{ "_id" : 5, "member" : "ijk123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 6, "member" : "cde123", "status" : "A", "points" : 86, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }
])

コレクションに次のインデックスを作成します。

db.members.createIndex( { status: 1 } )
db.members.createIndex( { points: 1 } )

次の削除操作は、インデックス { status: 1 } を使用することを明示的に指定します。

db.members.deleteMany(
{ "points": { $lte: 20 }, "status": "P" },
{ hint: { status: 1 } }
)

注意

存在しないインデックスを指定した場合、操作はエラーになります。

delete コマンドは以下を返します。

{ "acknowledged" : true, "deletedCount" : 3 }

使用されているインデックスを表示するには、$indexStats パイプラインを使用できます。

db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )

$indexStats 出力の accesses.ops フィールドには、インデックスを使用した操作の数が表示されます。

戻る

db.collection.dataSize