MongoDBで子オブジェクトを更新する方法|$set演算子の使い方を徹底解説
MongoDBで子オブジェクト(ネストされたドキュメント)を更新するには、$set 演算子を使用します。本記事では、実際のコマンド例をもとに、子オブジェクトの更新手順を順を追ってわかりやすく解説します。
1. サンプルコレクションの作成
まずは insertOne() メソッドを使って、子オブジェクトを含むドキュメントを登録し、コレクションを作成します。
> db.updateChildObjectsDemo.insertOne({"StudentName":"Chris","StudentOtherDetails":{"StudentSubject":"MongoDB","StudentCountryName":"AUS"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce964e078f00858fb12e91f")
}
2. 登録したドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを取得できます。pretty() を組み合わせると、インデントされた読みやすい形式で出力されます。
> db.updateChildObjectsDemo.find().pretty();
上記のクエリを実行すると、次のような結果が得られます。
{
"_id" : ObjectId("5ce964e078f00858fb12e91f"),
"StudentName" : "Chris",
"StudentOtherDetails" : {
"StudentSubject" : "MongoDB",
"StudentCountryName" : "AUS"
}
}
3. 子オブジェクトの更新
子オブジェクトの特定のフィールドだけを更新したい場合は、ドット記法(「親フィールド.子フィールド」)で対象のパスを指定し、$set 演算子で新しい値を設定します。ここでは、StudentOtherDetails 内の StudentCountryName を「AUS」から「UK」へ変更してみましょう。
> db.updateChildObjectsDemo.update({"StudentName" : "Chris"},{$set:{"StudentOtherDetails.StudentCountryName":"UK"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
実行結果として返される WriteResult では、nMatched が検索条件に一致したドキュメント数、nModified が実際に変更されたドキュメント数を表します。今回のように両方が 1 であれば、正常に更新が完了したことを意味します。
4. 更新結果の確認
もう一度 find() メソッドでドキュメントの内容を確認してみましょう。
> db.updateChildObjectsDemo.find().pretty();
実行すると、次の出力が得られます。
{
"_id" : ObjectId("5ce964e078f00858fb12e91f"),
"StudentName" : "Chris",
"StudentOtherDetails" : {
"StudentSubject" : "MongoDB",
"StudentCountryName" : "UK"
}
}
StudentCountryName の値が「AUS」から「UK」に更新され、同階層の StudentSubject など他のフィールドはそのまま保持されていることが確認できます。これこそが $set 演算子の強みであり、指定したフィールドのみを部分的に更新できるため、ドキュメント全体を書き換える必要がありません。
まとめ
MongoDBで子オブジェクトを更新する基本は、「$set 演算子+ドット記法」の組み合わせです。なお、近年のバージョンでは update() の代わりに updateOne() や updateMany() の使用が推奨されているため、運用環境に合わせて適切なメソッドを選択するとよいでしょう。
-
MongoDBでオブジェクトの配列を検索できますか?
MongoDBでオブジェクト配列を検索する方法はい、MongoDBではオブジェクトの配列を検索することが可能です。集計パイプライン(aggregate())の中で$unwindを使って配列を展開し、$matchで条件に一致する要素を抽出します。ここでは、実際の手順をサンプルコードとともに解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、オブジェクト配列を含むドキュメントをコレクションに登録します。> db.demo623.insertOne( ... { ... _id:1, ... details:
-
MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方
MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr