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

db.collection.deleteOne()

項目一覧

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

MongoDB とドライバー

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

C#Java SyncNode.jsC++GoJava RSKotlin CoroutineKotlin SyncPHPPyMongoMongoidRustScala

コレクションから 1 つのドキュメントを削除します。

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

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

次の環境でホストされる配置には db.collection.deleteOne() を使用できます。

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

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

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

deleteOne() メソッドの形式は次のとおりです。

db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string>
}
)

deleteOne() メソッドは次のパラメーターを取ります。

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

ドキュメント

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

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

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

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

db.collection.deleteOne()はフィルターに一致する最初のドキュメントを削除します。 正確な削除を行うには、 _idなどの一意のインデックスの構成フィールドを使用します。

シャーディングされたコレクションでdb.collection.deleteOne()を使用するには、次の手順に従います。

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

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

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

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

重要

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

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

db.collection.deleteOne()操作によってドキュメントが正常に削除されると、その操作によって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."
}
)

次の操作は、_id: ObjectId("563237a41a4d68582c2509da") のオーダーを削除します。

try {
db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") } );
} catch (e) {
print(e);
}

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

{ acknowledged: true, deletedCount: 1 }

次の操作は、 expirytsISODate("2015-11-01T12:40:15Z")より大きい最初のドキュメントを削除します。

try {
db.orders.deleteOne( { expiryts: { $lt: ISODate("2015-11-01T12:40:15Z") } } );
} catch (e) {
print(e);
}

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

{ acknowledged: true, deletedCount: 1 }

3 つのノードからなるレプリカセットがある場合、次の操作では majorityw と、100wtimeout と指定します。

try {
db.orders.deleteOne(
{ _id: ObjectId("563237a41a4d68582c2509da") },
{ 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

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

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

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

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

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

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

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

db.members.insertMany( [
{ _id: 1, student: "Richard", grade: "F", points: 0 },
{ _id: 2, student: "Jane", grade: "A", points: 60 },
{ _id: 3, student: "Adam", grade: "F", points: 0 },
{ _id: 4, student: "Ronan", grade: "D", points: 20 },
{ _id: 5, student: "Noah", grade: "F", points: 0 },
{ _id: 6, student: "Henry", grade: "A", points: 86 }
] )

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

db.members.createIndex( { grade: 1 } )

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

db.members.deleteOne(
{ points: { $lte: 20 }, grade: "F" },
{ hint: { grade: 1 } }
)

注意

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

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

{ acknowledged: true, deletedCount: 1 }

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

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

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

Tip

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

複数のドキュメントを削除するには、 db.collection.deleteMany()

戻る

db.collection.deleteMany