MongoDBで投票レコードの特定の1項目だけを更新するクエリの書き方
MongoDBでは、ネストされたドキュメント(サブドキュメント)の中から特定のフィールドだけを効率的に更新できます。この記事では、投票(Votes)レコードのうち「TotalVote」の値だけを更新する方法を、実際のコード例とともに解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、投票情報を格納したドキュメントを含むコレクションを作成します。
> db.demo57.insertOne({"Votes":{"VoterName":"Chris","TotalVote":50}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e285bb8cfb11e5c34d8991a")
}
> db.demo57.insertOne({"Votes":{"VoterName":"David","TotalVote":101}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e285bc3cfb11e5c34d8991b")
}上記のコマンドでは、「VoterName(投票者名)」と「TotalVote(総投票数)」を持つ「Votes」というネストされたドキュメントを2件登録しています。
2. 登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo57.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e285bb8cfb11e5c34d8991a"), "Votes" : { "VoterName" : "Chris", "TotalVote" : 50 } }
{ "_id" : ObjectId("5e285bc3cfb11e5c34d8991b"), "Votes" : { "VoterName" : "David", "TotalVote" : 101 } }3. 特定の1項目(TotalVote)のみを更新する
ここが本題です。ネストされたフィールドを更新するには、ドット記法(「Votes.VoterName」など)を使って条件を指定し、$inc演算子で対象の数値フィールドだけを加算・減算します。
以下は、「VoterName」が「David」のドキュメントに対して、「TotalVote」の値に19を加算するクエリの例です。
> db.demo57.update({"Votes.VoterName":"David" },{ $inc : { "Votes.TotalVote" : 19 } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果の「nModified : 1」は、1件のドキュメントが正常に更新されたことを示しています。$inc演算子に負の値を指定すれば、票数を減らす(下方向へ更新する)ことも可能です。
4. 更新結果の確認
再度find()メソッドを実行して、更新が正しく反映されているか確認しましょう。
> db.demo57.find();
出力は次のようになります。DavidのTotalVoteだけが101から120に増加し、Chrisのデータは変更されていないことがわかります。
{ "_id" : ObjectId("5e285bb8cfb11e5c34d8991a"), "Votes" : { "VoterName" : "Chris", "TotalVote" : 50 } }
{ "_id" : ObjectId("5e285bc3cfb11e5c34d8991b"), "Votes" : { "VoterName" : "David", "TotalVote" : 120 } }まとめ
MongoDBでネストされたドキュメントの一部だけを更新する場合は、ドット記法でパスを指定し、$incや$setなどの更新演算子を組み合わせるのが基本です。これにより、他のフィールドに影響を与えることなく、目的の1項目だけを安全に更新できます。
-
MongoDBでドキュメント内の配列要素を1ずつインクリメントして更新する方法
MongoDBでは、ドキュメント内の配列(リスト)の中から特定の要素だけを取り出して更新し、その値を1ずつ増加させたいケースがあります。このような場合には、位置演算子($)と$inc演算子を組み合わせて使用します。 位置演算子($):クエリ条件に一致した配列要素を自動的に特定するための演算子です。 $inc演算子:フィールドの数値を指定した量だけ増減させるための演算子です。 それでは、実際にサンプルコレクションを作成しながら、具体的な手順を見ていきましょう。 1. コレクションの作成とドキュメントの挿入 まず、insertOne()メソッドを使って「demo39」というコレクションにドキュ
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &