MongoDBで1つのドキュメントのみを更新する方法
MongoDBのコレクションに含まれる1つのドキュメントのみを更新したい場合は、updateOne()メソッドを使用します。このメソッドは条件に一致した最初の1件だけを更新するため、他のドキュメントに影響を与えたくない場合に非常に便利です。ここでは、コレクションの作成から更新結果の確認まで、具体的な手順を見ていきましょう。
準備:サンプルコレクションの作成
まず、動作確認用に学生情報を格納するコレクションを作成し、ドキュメントを3件挿入します。
> db.updateOneDemo.insertOne({"StudentId":1,"StudentFirstName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06ed3725ddae1f53b621e8")
}
> db.updateOneDemo.insertOne({"StudentId":2,"StudentFirstName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06ed3825ddae1f53b621e9")
}
> db.updateOneDemo.insertOne({"StudentId":1,"StudentFirstName":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06ed3825ddae1f53b621ea")
}
現在のドキュメントを確認する
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.updateOneDemo.find();
実行結果は以下のとおりです。
{ "_id" : ObjectId("5e06ed3725ddae1f53b621e8"), "StudentId" : 1, "StudentFirstName" : "Chris" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621e9"), "StudentId" : 2, "StudentFirstName" : "David" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621ea"), "StudentId" : 1, "StudentFirstName" : "Mike" }
updateOne()で単一ドキュメントを更新する
MongoDBで1件のドキュメントだけを更新するには、次のようなクエリを実行します。フィルタ条件として空のオブジェクト {} を指定しているため、最初に見つかった1件のみが更新対象となります。また、$set演算子によって「StudentFirstName」フィールドの値を「Robert」に変更しています。
> db.updateOneDemo.updateOne({},{$set:{"StudentFirstName": "Robert"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
実行結果に含まれるmatchedCountは条件に一致したドキュメント数、modifiedCountは実際に更新されたドキュメント数を示します。どちらも「1」となっていることから、確かに1件だけが処理されていることがわかります。
更新後のドキュメントを確認する
更新が完了したので、もう一度find()メソッドを実行して結果を確認しましょう。
> db.updateOneDemo.find();
出力結果は以下のようになります。
{ "_id" : ObjectId("5e06ed3725ddae1f53b621e8"), "StudentId" : 1, "StudentFirstName" : "Robert" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621e9"), "StudentId" : 2, "StudentFirstName" : "David" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621ea"), "StudentId" : 1, "StudentFirstName" : "Mike" }
このように、先頭のドキュメント(Chris)だけが「Robert」に更新され、同じStudentIdを持つ「Mike」を含む他のドキュメントは一切変更されていません。これがupdateOne()メソッドの特徴です。なお、条件に一致するすべてのドキュメントをまとめて更新したい場合は、updateMany()メソッドを使用してください。
-
MongoDBでネストされたドキュメントを更新する方法|位置演算子$を使った配列要素の更新手順
MongoDBでは、ドキュメント内の配列に格納されたネストされた(入れ子の)ドキュメントも、位置演算子「$」を使うことで効率的に更新できます。この記事では、実際のコード例を通じて、配列内の特定のサブドキュメントを更新する手順をわかりやすく解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ネストされたドキュメントを含むコレクションを作成します。ここでは「Information」というフィールドに、複数のサブドキュメントを持つ配列を格納しています。 > db.demo595.insertOne( { Information: [ { _i
-
【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方
MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...