MongoDBのupdate()と$pull演算子で配列から特定の要素を削除する方法
MongoDBでは、配列フィールドから特定の要素を削除したい場面がよくあります。そんなときに便利なのが、update()メソッドと$pull演算子の組み合わせです。この記事では、実際のコード例を通して、その使い方をわかりやすく解説します。
1. サンプルコレクションの作成
まず、配列フィールドを持つドキュメントを含むコレクションを作成します。ここでは「UserMessage」という配列フィールドを持つドキュメントを挿入してみましょう。
> db.removingAnArrayElementDemo.insertOne({"UserMessage":["Hi","Hello","Bye"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cef97bdef71edecf6a1f6a4")
}2. 挿入したドキュメントの確認
find()メソッドとpretty()を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.removingAnArrayElementDemo.find().pretty();
出力結果
{
"_id" : ObjectId("5cef97bdef71edecf6a1f6a4"),
"UserMessage" : [
"Hi",
"Hello",
"Bye"
]
}3. $pull演算子で配列要素を削除する
それでは、$pull演算子を使って、配列から「Hello」という要素を削除してみましょう。第一引数には対象ドキュメントを特定する条件(_idなど)を指定し、第二引数の$pullで削除したい値を指定します。
> db.removingAnArrayElementDemo.update(
{_id:ObjectId("5cef97bdef71edecf6a1f6a4")},
{ "$pull": { "UserMessage": "Hello" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果のnModified : 1は、1件のドキュメントが正常に更新されたことを示しています。
4. 削除後のドキュメントを再確認
もう一度find()メソッドでドキュメントを確認すると、「Hello」が配列から取り除かれていることがわかります。
> db.removingAnArrayElementDemo.find().pretty();
出力結果
{
"_id" : ObjectId("5cef97bdef71edecf6a1f6a4"),
"UserMessage" : [
"Hi",
"Bye"
]
}補足:新しいバージョンでの推奨メソッド
MongoDB 5.0以降では、update()メソッドは非推奨となっており、代わりにupdateOne()やupdateMany()の使用が推奨されています。同じ処理は以下のように書き換えられます。
> db.removingAnArrayElementDemo.updateOne(
{_id:ObjectId("5cef97bdef71edecf6a1f6a4")},
{ "$pull": { "UserMessage": "Hello" } }
);$pull演算子は、指定した値に一致するすべての要素を配列から削除できる強力なツールです。条件式($gteや$inなど)と組み合わせれば、より柔軟な削除操作も可能になります。ぜひ活用してみてください。
-
MongoDBの$push演算子を使って条件に一致する配列要素を更新する方法
MongoDBの$push演算子で条件に一致する配列要素を更新する方法MongoDBでは、updateコマンドと$push演算子を組み合わせることで、条件に一致する配列要素を更新できます。$pushは配列の末尾に新しい値を追加するための更新演算子であり、位置指定演算子「$」と併用することで、クエリ条件に一致した特定の配列要素だけをピンポイントで操作することが可能です。1. コレクションの作成まずは、insertOne()メソッドを使ってサンプル用のコレクションを作成します。> db.demo9.insertOne({StudentDetails:[{StudentName:Chris,L
-
MongoDBで配列要素を_idで検索して更新する方法(位置演算子$の使い方)
MongoDBでは、ドキュメント内の配列要素をその _id を使って検索し、特定の部分だけを更新したいケースがよくあります。このような場合に活躍するのが位置演算子(positional $ operator)です。検索条件に一致した配列要素を自動的に特定し、その要素だけに対して更新処理を適用できます。 この記事では、サンプルコレクションを作成し、位置演算子 $ を使って配列内の特定の要素を検索・更新する手順を解説します。 1. サンプルコレクションの作成 まずは、insertOne() メソッドを使ってドキュメントを含むコレクションを作成しましょう。ここでは「Details」という配列フィー