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

MongoDBでレコードを更新する方法|_idを指定したupdateの基本を解説

MongoDBのレコード更新の基本

MongoDBで既存のレコード(ドキュメント)を更新するには、_idフィールドを基準に対象を特定して更新するのが基本です。ここでは、サンプルコレクションを作成し、実際にupdateメソッドを使ってレコードを更新する手順を順番に見ていきましょう。

1. サンプルコレクションとドキュメントの作成

まず、insertOne()メソッドを使ってコレクション「demo458」にドキュメントを3件挿入します。

> db.demo458.insertOne( {_id:101,"Name":"David" } );
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo458.insertOne( {_id:102,"Name":"Chris" } );
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo458.insertOne( {_id:103,"Name":"Bob" } );
{ "acknowledged" : true, "insertedId" : 103 }

2. find()メソッドで全ドキュメントを確認

find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo458.find();

実行すると、以下のような出力が得られます。

{ "_id" : 101, "Name" : "David" }
{ "_id" : 102, "Name" : "Chris" }
{ "_id" : 103, "Name" : "Bob" }

3. update()メソッドでレコードを更新する

次に、_idが「102」のドキュメントを対象に、$set演算子を使って「Name」フィールドの値を更新します。第一引数には検索条件(クエリ)、第二引数には更新内容を指定します。

> db.demo458.update({_id:102},{$set:{"Name":"David Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nMatched: 1」「nModified: 1」は、条件に一致したドキュメントが1件あり、そのうち1件が実際に更新されたことを意味します。

4. 更新後のデータを再確認する

もう一度find()メソッドを実行して、更新が正しく反映されているか確認しましょう。

> db.demo458.find();

実行結果は以下の通りです。「_id: 102」のNameフィールドが「David Miller」に変更されていることがわかります。

{ "_id" : 101, "Name" : "David" }
{ "_id" : 102, "Name" : "David Miller" }
{ "_id" : 103, "Name" : "Bob" }

補足:updateOne()・updateMany()の活用もおすすめ

従来のupdate()メソッドは非推奨となっており、現在のMongoDBでは用途に応じて以下のメソッドを使うのが推奨されています。

  • updateOne():条件に一致した最初の1件だけを更新
  • updateMany():条件に一致したすべてのドキュメントを更新
  • replaceOne():ドキュメント全体を新しいドキュメントで置き換え

例えば、先ほどの更新はupdateOne()を使って次のように書けます。

> db.demo458.updateOne({_id:102},{$set:{"Name":"David Miller"}});

$set演算子を使うことで、指定したフィールドだけを部分的に更新でき、他のフィールドに影響を与えません。条件に一致するドキュメントが存在しない場合に新規作成したいときは、第三引数に{ upsert: true }オプションを指定することも可能です。

まとめ

MongoDBでのレコード更新は、「_idなどの条件で対象を特定し、$set演算子で更新内容を指定する」という流れが基本です。最新バージョンではupdateOne()やupdateMany()の使用が推奨されているため、目的に合わせて適切なメソッドを選択しましょう。

  1. MongoDB 3.xで重複レコードを検出・削除する方法を解説

    MongoDB 3.xで重複レコードを削除する方法MongoDBを運用していると、意図せず重複データが混入することがあります。本記事では、aggregate()(集計フレームワーク)を使って重複レコードを特定する手順と、実際に削除するまでの流れを、サンプルコード付きでわかりやすく解説します。サンプルコレクションの作成まずは動作確認用として、意図的に重複を含むドキュメントを持つコレクションを作成します。insertOne()メソッドを使用してドキュメントを挿入していきます。> db.demo438.insertOne({"FirstName":"Chris&q

  2. MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方

    MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr