MongoDBでサブコレクション(ネストされたドキュメント)を更新する方法
MongoDBでは、ネストされたドキュメント(サブコレクション)の配列に要素を追加したい場合、update()メソッドと$push演算子を組み合わせて使用します。ドット記法(dot notation)を使うことで、サブドキュメント内の特定のフィールドに直接アクセスし、値を追加することができます。
ドキュメントを含むコレクションを作成する
まず、サンプルとなるコレクションにドキュメントを挿入してみましょう。
> db.demo547.insertOne(
... {
... Name : "Chris",
... Test :
... {
... "FirstTest" :
... {
... Scores: [56,29,76]
... },
... "SecondTest" :
... {
... Scores: [98,91,78]
... }
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8e2d579e5f92834d7f05dd")
}find()メソッドですべてのドキュメントを表示する
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo547.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e8e2d579e5f92834d7f05dd"), "Name" : "Chris", "Test" : { "FirstTest" : {
"Scores" : [ 56, 29, 76 ] }, "SecondTest" : { "Scores" : [ 98, 91, 78 ] } } }$push演算子とドット記法による更新クエリ
次に、サブコレクション内の配列に対して同時に更新を行うクエリを見てみましょう。$push演算子を使用し、ドット記法で「Test.FirstTest.Scores」のパスを指定することで、ネストされた配列の末尾に新しい値「99」を追加しています。
> db.demo547.update({"Name":"Chris"}, { $push:{ "Test.FirstTest.Scores" : 99}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果を見ると、1件のドキュメントがマッチし、1件が正常に更新されたことがわかります。
更新後の結果を確認する
再度find()メソッドを実行して、更新後のドキュメントを確認しましょう。
> db.demo547.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e8e2d579e5f92834d7f05dd"), "Name" : "Chris", "Test" : { "FirstTest" : {
"Scores" : [ 56, 29, 76, 99 ] }, "SecondTest" : { "Scores" : [ 98, 91, 78 ] } } }出力結果から、「FirstTest」の「Scores」配列に「99」が正しく追加され、一方で「SecondTest」の「Scores」配列は変更されていないことが確認できます。このように、ドット記法と$push演算子を組み合わせることで、ネストされたドキュメントの特定の配列だけをピンポイントで更新することが可能です。
-
MongoDBでサーバーレコードを含むコレクションのステータスを非アクティブに更新する方法
MongoDBでサーバーのステータスを非アクティブに更新する方法サーバーレコードを含むMongoDBコレクションでは、配列形式で保存されたサーバー情報の中から特定のサーバーだけを探し出し、そのステータスを「Active(アクティブ)」から「Inactive(非アクティブ)」へ変更したいケースがあります。この記事では、位置指定演算子「$」を使って、配列内の条件に一致した要素だけを効率的に更新する手順を解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サーバー情報(serverInformation)を配列として持つドキュメントを挿入し、コレクシ
-
MongoDBでコレクション内のドキュメントの各フィールドを数式を使って更新する方法
コレクション内のドキュメントの各フィールドを数式(計算式)で一括更新したい場合は、MongoDBの update() メソッドに $mul 演算子と全位置演算子 $[] を組み合わせて使用します。本記事では、配列内のすべての要素に対して特定のフィールドの値を乗算で更新する具体的な手順を解説します。サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo749.insertOne({details:[{id:1,a:10},{id:2,a:5},{id:3,a:20}]}); { acknowledge