MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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件のみを更新するため、意図しない複数件の更新を防げるというメリットもあります。用途に応じて適切なメソッドを選択しましょう。

  1. MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)

    MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って

  2. MySQLの単一クエリでIDが最も高い行を更新する方法

    はい、単一のクエリで実行可能です。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable     (     ID int,     GameScore int     ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードをいくつか挿入します。mysql> insert into DemoTable