ObjectIdだけを指定してMongoDBのドキュメントを更新するクエリの書き方
MongoDBでObjectIdを指定してドキュメントを更新する方法
MongoDBでは、update()メソッドでドキュメントを更新し、$set演算子で新しい値を設定します。この記事では、_id(ObjectId)のみを条件として特定の行(ドキュメント)を更新する手順を、サンプルコード付きで解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.demo34.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758b4cfb11e5c34d898cd")
}
> db.demo34.insertOne({"StudentFirstName":"David","StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758bdcfb11e5c34d898ce")
}
> db.demo34.insertOne({"StudentFirstName":"Bob","StudentAge":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758c6cfb11e5c34d898cf")
}
登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo34.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e1758b4cfb11e5c34d898cd"), "StudentFirstName" : "Chris", "StudentAge" : 24 }
{ "_id" : ObjectId("5e1758bdcfb11e5c34d898ce"), "StudentFirstName" : "David", "StudentAge" : 23 }
{ "_id" : ObjectId("5e1758c6cfb11e5c34d898cf"), "StudentFirstName" : "Bob", "StudentAge" : 20 }
ObjectIdを指定してドキュメントを更新するクエリ
以下が、MongoDBの行を更新するためのクエリです。更新対象のドキュメントをObjectIdのみで指定し、$setで新しい値を設定しています。
> db.demo34.update({_id:ObjectId("5e1758bdcfb11e5c34d898ce")},
... {$set:{"StudentFirstName" : "Mike","StudentAge" : 19}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
実行結果の「nMatched : 1」「nModified : 1」は、1件のドキュメントが条件に一致し、正常に更新されたことを示しています。
更新後のドキュメントを確認する
もう一度find()メソッドを実行して、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo34.find();
出力結果は以下の通りです。
{ "_id" : ObjectId("5e1758b4cfb11e5c34d898cd"), "StudentFirstName" : "Chris", "StudentAge" : 24 }
{ "_id" : ObjectId("5e1758bdcfb11e5c34d898ce"), "StudentFirstName" : "Mike", "StudentAge" : 19 }
{ "_id" : ObjectId("5e1758c6cfb11e5c34d898cf"), "StudentFirstName" : "Bob", "StudentAge" : 20 }
「David」だったドキュメントが「Mike」(年齢19歳)に更新されていることが確認できます。このように、_idにObjectIdを指定するだけで、目的のドキュメントを正確に特定して更新できます。
補足:最新のMongoDBで推奨される更新方法
MongoDB 4.2以降では、従来のupdate()は非推奨となり、updateOne()やupdateMany()の使用が推奨されています。単一のドキュメントを更新する場合は、以下のように記述します。
> db.demo34.updateOne(
... {_id:ObjectId("5e1758bdcfb11e5c34d898ce")},
... {$set:{"StudentFirstName" : "Mike","StudentAge" : 19}});
updateOne()は最初に一致した1件のみを更新するため、意図しない複数件の更新を防げるというメリットもあります。用途に応じて適切なメソッドを選択しましょう。
-
MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)
MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って
-
MySQLの単一クエリでIDが最も高い行を更新する方法
はい、単一のクエリで実行可能です。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( ID int, GameScore int ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードをいくつか挿入します。mysql> insert into DemoTable