MongoDBの$pull演算子を使って配列内のドキュメントを削除する方法
MongoDBで配列(アレイ)内に格納されたドキュメントを削除したい場合は、updateコマンドと$pull演算子を組み合わせて使用します。この記事では、実際のコード例を通して、$pull演算子の基本的な使い方をわかりやすく解説します。
1. サンプルコレクションの作成
まず、テスト用のコレクションにドキュメントを挿入します。以下のクエリを実行して、学生情報を持つ2つのドキュメントを作成しましょう。
> db.deleteDocumentsDemo.insertOne(
... {
... "_id":100,
... "StudentsDetails" : [
... {
... "StudentId" : 1,
... "StudentName" : "John"
... },
... {
... "StudentId" : 2,
... "StudentName" : "Carol"
... },
... {
... "StudentId" : 3,
... "StudentName" : "Sam"
... },
... {
... "StudentId" : 4,
... "StudentName" : "Mike"
... }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 100 }> db.deleteDocumentsDemo.insertOne(
... {
... "_id":200,
... "StudentsDetails" : [
... {
... "StudentId" : 5,
... "StudentName" : "David"
... },
... {
... "StudentId" : 6,
... "StudentName" : "Ramit"
... },
... {
... "StudentId" : 7,
... "StudentName" : "Adam"
... },
... {
... "StudentId" : 8,
... "StudentName" : "Larry"
... }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 200 }2. 登録されたドキュメントの確認
次に、find()メソッドを使ってコレクション内のすべてのドキュメントを表示します。
> db.deleteDocumentsDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : 100,
"StudentsDetails" : [
{
"StudentId" : 1,
"StudentName" : "John"
},
{
"StudentId" : 2,
"StudentName" : "Carol"
},
{
"StudentId" : 3,
"StudentName" : "Sam"
},
{
"StudentId" : 4,
"StudentName" : "Mike"
}
]
}
{
"_id" : 200,
"StudentsDetails" : [
{
"StudentId" : 5,
"StudentName" : "David"
},
{
"StudentId" : 6,
"StudentName" : "Ramit"
},
{
"StudentId" : 7,
"StudentName" : "Adam"
},
{
"StudentId" : 8,
"StudentName" : "Larry"
}
]
}3. $pull演算子で配列内のドキュメントを削除する
ここからが本題です。配列内の特定のドキュメントを削除するには、updateメソッドの第2引数に$pull演算子を指定します。さらに、{multi: true}オプションを付けることで、条件に一致するすべてのドキュメントが更新対象になります。
以下の例では、「StudentName」が「David」である要素を配列から削除しています。
> db.deleteDocumentsDemo.update({},
... {$pull: {StudentsDetails: {StudentName: "David"}}},
... {multi: true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })実行結果の「nModified : 1」は、1件のドキュメントから該当要素が削除されたことを示しています。
4. 削除結果の確認
実際にドキュメントが削除されているか、再度find()メソッドで確認してみましょう。
> db.deleteDocumentsDemo.find().pretty();
実行すると、以下の出力が得られます。
{
"_id" : 100,
"StudentsDetails" : [
{
"StudentId" : 1,
"StudentName" : "John"
},
{
"StudentId" : 2,
"StudentName" : "Carol"
},
{
"StudentId" : 3,
"StudentName" : "Sam"
},
{
"StudentId" : 4,
"StudentName" : "Mike"
}
]
}
{
"_id" : 200,
"StudentsDetails" : [
{
"StudentId" : 6,
"StudentName" : "Ramit"
},
{
"StudentId" : 7,
"StudentName" : "Adam"
},
{
"StudentId" : 8,
"StudentName" : "Larry"
}
]
}まとめ
上記の出力結果を見ると、「StudentId」が5、「StudentName」が「David」である要素が、_id: 200のドキュメントの配列から正常に削除されていることが確認できます。
このように、MongoDBでは$pull演算子を使うことで、配列内の特定条件に一致するドキュメントや値を簡単に取り除くことができます。なお、新しいバージョンのMongoDBでは、update()の代わりにupdateMany()やupdateOne()を使用することが推奨されているため、実運用では状況に応じて使い分けるとよいでしょう。
-
MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)
MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr
-
MongoDBで配列内の一致オブジェクト数に基づいてドキュメントを検索する方法
MongoDBでは、$where演算子とJavaScript関数を組み合わせることで、配列内に存在する一致したオブジェクトの数に基づいてドキュメントを検索できます。この記事では、具体的なサンプルを通じてその方法を解説します。サンプルデータの準備まずは、ドキュメントを含むコレクションを作成しましょう。> db.demo694.insertOne( ... { ... details : ... [ ... { ... Name : Chris, ... Age:21 ...