MongoDBで配列の要素を削除する方法|$pullと$in演算子の使い方を解説
MongoDBでドキュメント内の配列から特定の要素を削除したい場合、$pull演算子と$in演算子を組み合わせて使用するのが一般的です。この記事では、基本構文から実際のコレクションを使った実行例まで、手順を追ってわかりやすく解説します。
配列要素を削除するための基本構文
複数の配列から同時に要素を削除する場合の基本構文は以下のとおりです。
db.yourCollectionName.update({},
{$pull:{yourFirstArrayName:{$in:["yourValue"]},yourSecondArrayName:"yourValue"}},
{multi:true}
);各オプションの意味は次のとおりです。
- $pull: 指定した条件に一致する要素を配列から取り除きます。
- $in: 複数の値を配列で指定し、いずれかに一致する要素をまとめて削除できます。単一の値であれば省略可能です。
- {multi:true}: 条件に一致したすべてのドキュメントに更新を適用します(指定しない場合は最初の1件のみ)。
サンプルコレクションの作成
それでは、実際に動作を確認してみましょう。まずはテスト用のコレクションを作成します。次のクエリを実行してドキュメントを挿入してください。
> db.removeArrayElement.insertOne({"StudentName":"Larry","StudentCoreSubject":["MongoDB","MySQL","SQL Server","Java"],"StudentFavouriteTeacher":["John","Marry","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6ec9c46fd07954a4890688")
}このドキュメントには、学生名(StudentName)、専攻科目の配列(StudentCoreSubject)、好きな先生の配列(StudentFavouriteTeacher)が含まれています。
挿入したデータの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.removeArrayElement.find().pretty();
実行結果は以下のとおりです。
{
"_id" : ObjectId("5c6ec9c46fd07954a4890688"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"MongoDB",
"MySQL",
"SQL Server",
"Java"
],
"StudentFavouriteTeacher" : [
"John",
"Marry",
"Carol"
]
}配列要素を削除するクエリの実行
準備ができたら、実際に要素を削除してみましょう。1つ目の配列「StudentCoreSubject」から「Java」を、2つ目の配列「StudentFavouriteTeacher」から「Marry」を削除するクエリが次のとおりです。
> db.removeArrayElement.update({},
... {$pull:{StudentCoreSubject:{$in:["Java"]},StudentFavouriteTeacher:"Marry"}},
... {multi:true}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })ここでは、最初の配列(StudentCoreSubject)からは「Java」を$in演算子経由で指定し、2つ目の配列(StudentFavouriteTeacher)からは「Marry」を直接指定しています。このように、$pullの中では複数の配列フィールドに対して異なる条件を同時に設定できます。
削除結果の確認
再度find()メソッドを実行して、要素が正しく削除されたか確認しましょう。
> db.removeArrayElement.find().pretty();
実行結果は以下のとおりです。
{
"_id" : ObjectId("5c6ec9c46fd07954a4890688"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"MongoDB",
"MySQL",
"SQL Server"
],
"StudentFavouriteTeacher" : [
"John",
"Carol"
]
}出力結果を見ると、1つ目の配列(StudentCoreSubject)からは「Java」が、2つ目の配列(StudentFavouriteTeacher)からは「Marry」が消えていることが確認できます。これで、コレクションから目的の配列要素を正常に削除できました。
補足:新しいバージョンのMongoDBでの注意点
MongoDB 4.2以降では、update()メソッドは非推奨(deprecated)となっており、代わりにupdateMany()やupdateOne()の使用が推奨されています。すべてのドキュメントに適用する場合、{multi:true}の代わりにupdateMany()を使うと、より意図が明確なコードになります。
db.removeArrayElement.updateMany({},
{$pull:{StudentCoreSubject:{$in:["Java"]},StudentFavouriteTeacher:"Marry"}}
);まとめ
MongoDBで配列要素を削除するには、$pull演算子を使用します。$in演算子と組み合わせれば複数の値を一括で削除でき、{multi:true}(またはupdateMany())を指定すればすべてのドキュメントに同じ更新を適用できます。単一の配列だけでなく、複数の配列フィールドへの操作も1つのクエリで実行できるので、ぜひ活用してください。
-
Swiftの配列から特定の要素を削除する方法を徹底解説
Swiftで配列から特定の要素を削除したい場合、いくつかの方法があります。この記事では、実際のコード例を交えながら、代表的な2つの方法をわかりやすく解説します。 まずは、String型の配列を用意しましょう。 var arrayOfString = [a,b,c,f] この配列を使って、以下の2つの方法で特定の要素を削除していきます。 方法1:filterメソッドを使う Swiftの配列にはfilterメソッドが標準で用意されています。これは、指定した条件に基づいて要素を絞り込み、新しい配列として返すメソッドです。削除したい要素を条件から除外することで、実質的にその要素を取り除くことができます
-
C#の配列から要素を削除する方法【サンプルコード付きで解説】
C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。 基本的な考え方:要素をシフトして削除する まず、次のように5つの要素を持つ配列を用意します。 int[] arr = new int[5] {35, 50, 55, 77, 98}; たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。 // 削除位置以降の要素を前方へシフト for (i