MongoDBで配列から一致する要素を削除する方法:$pullAll演算子の使い方
MongoDBでは、配列から一致する要素を削除したい場合に$pullAll演算子を使用します。$pullAllは、指定した複数の値に完全一致する要素をまとめて配列から取り除くことができる便利な更新演算子です。
この記事では、実際のコード例を使いながら、コレクションの作成から要素の削除、結果の確認までの手順を順番に解説します。
1. テスト用コレクションの作成
まず、ドキュメントを含むコレクションを作成します。ここでは「ListOfNames」という名前の配列フィールドを持つドキュメントを挿入します。
> db.removeElementsDemo.insertOne({"ListOfNames":["Mike","Sam","David","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e071e5a25ddae1f53b62203")
}2. 挿入したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.removeElementsDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e071e5a25ddae1f53b62203"),
"ListOfNames" : [
"Mike",
"Sam",
"David",
"Carol"
]
}3. $pullAllを使って要素を削除する
それでは、配列から「Carol」を削除してみましょう。update()メソッドと組み合わせて$pullAllを使用します。
> db.removeElementsDemo.update(
... { },
... {
... $pullAll:
... {
... "ListOfNames": ["Carol"]
... }
... }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果を見ると、「nModified : 1」と表示されており、1件のドキュメントが正常に更新されたことがわかります。
4. 削除後のドキュメントを確認する
再度find()メソッドを実行して、削除後の状態を確認しましょう。
> db.removeElementsDemo.find().pretty();
出力結果は以下の通りです。今回は単一の値(Carol)のみを削除しましたが、配列から正しく取り除かれているのがわかります。
{
"_id" : ObjectId("5e071e5a25ddae1f53b62203"),
"ListOfNames" : [
"Mike",
"Sam",
"David"
]
}補足:$pullAllと$pullの違い
$pullAllは指定した値リストと完全一致する要素のみを削除します。一方、$pull演算子を使うと、条件式(例:「スコアが50以下の要素」など)に基づいて要素を削除することも可能です。
また、$pullAllでは複数の値を同時に削除できます。例えば、「["Sam", "David"]」のように配列で渡せば、該当するすべての要素が一度に削除されます。用途に応じて両者を使い分けるとよいでしょう。
-
MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説
MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic
-
MongoDBでコレクションから配列フィールド全体を削除するクエリの書き方
MongoDBで配列フィールドを完全に削除するにはMongoDBのコレクションから、ドキュメント内の配列フィールドそのもの(フィールドごと)を取り除きたい場合は、更新演算子の $unset を使用します。$unset は指定したフィールドをドキュメントから削除する演算子で、配列の中身だけを空にするのではなく、フィールド自体が存在しない状態にできます。ここでは、サンプルコレクションを作成して、実際に配列フィールドを削除する手順を見ていきましょう。1. サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメントを挿入し、テスト用のコレクション demo609 を作成します