$set演算子と位置指定$演算子を使って、MongoDBで配列内の特定ドキュメントを更新する方法
$set演算子と位置指定(positional)$演算子を使用して配列内の特定のドキュメントを更新するには、MongoDBのupdateOne()メソッドを利用します。updateOne()は、クエリフィルターに基づいてコレクション内の1件のドキュメントを更新するためのメソッドです。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.demo462.insertOne(
... {
... "id":1,
... "DueDateDetails": [
... {
... "Name": "David",
... "Age":21,
... "CountryName":["US","UK"]
... },
... {
... "Name": "Chris",
... "Age":23,
... "CountryName":["UK"]
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f6c59cb66ccba22cc9dce")
}登録されたドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo462.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e7f6c59cb66ccba22cc9dce"), "id" : 1, "DueDateDetails" : [ { "Name" :
"David", "Age" : 21, "CountryName" : [ "US", "UK" ] }, { "Name" : "Chris", "Age" : 23,
"CountryName" : [ "UK" ] } ] }$setと位置指定$演算子による更新クエリ
以下は、updateOne()メソッドと組み合わせて、$setおよび位置指定$演算子を使用して配列内のドキュメントを更新するクエリです。
> db.demo462.updateOne(
... {id: 1, "DueDateDetails.Name": "Chris"},
... { $set: { "DueDateDetails.$.CountryName": "AUS"} }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }このクエリでは、「id: 1」かつ「DueDateDetails.Name: "Chris"」という条件に一致する配列要素を特定し、位置指定$演算子がその要素を指し示すことで、該当する要素の"CountryName"フィールドのみを"AUS"に更新しています。配列全体を書き換える必要がないため、効率的な部分更新が可能です。
更新結果の確認
再度find()メソッドを実行して、更新後のドキュメントを確認してみましょう。
> db.demo462.find().pretty();
実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e7f6c59cb66ccba22cc9dce"),
"id" : 1,
"DueDateDetails" : [
{
"Name" : "David",
"Age" : 21,
"CountryName" : [
"US",
"UK"
]
},
{
"Name" : "Chris",
"Age" : 23,
"CountryName" : "AUS"
}
]
}このように、ChrisのCountryNameが配列["UK"]から文字列"AUS"へと更新されました。位置指定$演算子を活用することで、条件に一致した配列内の特定の要素だけをピンポイントで更新でき、他のデータに影響を与えない安全なドキュメント操作が実現できます。
-
MongoDBでドキュメントとサブドキュメントを表示・更新する方法(実例付き)
MongoDBでは、ドキュメントの中にサブドキュメント(ネストされた配列やオブジェクト)を持たせることができます。この記事では、ドキュメントとサブドキュメントを含むコレクションの作成、find()メソッドによる表示、update()メソッドによる更新までを具体例とともに解説します。ドキュメントとサブドキュメントの基本構文ドキュメントとサブドキュメントを挿入する際の基本的な構文は以下のとおりです。db.yourCollectionName.insertOne( {
-
MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法
MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: