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

MongoDBでドキュメント全体(全フィールド)を最速で更新する方法

MongoDBでドキュメント全体を更新するには?

MongoDBでドキュメント全体(すべてのフィールド)を一括して置き換えたい場合、最も高速かつ簡単な方法は replaceOne() メソッドを使用することです。update演算子($setなど)を使わずに新しいドキュメントをそのまま渡すだけで、既存のドキュメントを丸ごと置き換えることができます。

この記事では、実際のコード例を使いながら、replaceOne()によるドキュメント全体の更新手順を解説します。

1. サンプルコレクションの作成

まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成しましょう。

> db.demo431.insertOne({"Name":"Chris","Age":32});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770ba6bbc41e36cc3cae89")
}
> db.demo431.insertOne({"Name":"David","Age":31});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bacbbc41e36cc3cae8a")
}
> db.demo431.insertOne({"Name":"John","Age":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bb3bbc41e36cc3cae8b")
}
> db.demo431.insertOne({"Name":"Bob","Age":22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bb8bbc41e36cc3cae8c")
}

2. 登録されたドキュメントの確認

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

> db.demo431.find();

上記のクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e770ba6bbc41e36cc3cae89"), "Name" : "Chris", "Age" : 32 }
{ "_id" : ObjectId("5e770bacbbc41e36cc3cae8a"), "Name" : "David", "Age" : 31 }
{ "_id" : ObjectId("5e770bb3bbc41e36cc3cae8b"), "Name" : "John", "Age" : 24 }
{ "_id" : ObjectId("5e770bb8bbc41e36cc3cae8c"), "Name" : "Bob", "Age" : 22 }

3. replaceOne()でドキュメント全体を更新する

次のクエリでは、replaceOne()を使って「John」という名前のドキュメントを、まったく新しい内容のドキュメントに置き換えています。

> db.demo431.replaceOne(
...    { "Name" : "John" },
...    { "Name" : "Robert", "Age" :45 }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

実行結果を見ると、「matchedCount: 1」「modifiedCount: 1」と表示されており、1件のドキュメントが正常に置き換えられたことがわかります。

4. 更新後のドキュメントの確認

もう一度find()メソッドを実行して、コレクション内のすべてのドキュメントを表示してみましょう。

> db.demo431.find();

出力結果は以下の通りです。

{ "_id" : ObjectId("5e770ba6bbc41e36cc3cae89"), "Name" : "Chris", "Age" : 32 }
{ "_id" : ObjectId("5e770bacbbc41e36cc3cae8a"), "Name" : "David", "Age" : 31 }
{ "_id" : ObjectId("5e770bb3bbc41e36cc3cae8b"), "Name" : "Robert", "Age" : 45 }
{ "_id" : ObjectId("5e770bb8bbc41e36cc3cae8c"), "Name" : "Bob", "Age" : 22 }

「John / Age 24」だったドキュメントが、「Robert / Age 45」に完全に置き換えられていることが確認できます。なお、_idフィールドは変更されないという点に注目してください。replaceOne()では_id以外のすべてのフィールドが新しいドキュメントの内容で置き換えられます。

まとめ

  • MongoDBでドキュメント全体を更新する最速の方法はreplaceOne()を使うことです。
  • 第一引数に検索条件、第二引数に置き換え後の新しいドキュメントを指定します。
  • _idフィールドは保持され、それ以外のフィールドはすべて新しい値に置き換わります。
  • 一部のフィールドだけを更新したい場合は、updateOne()や$set演算子を使用するのが適しています。
  1. MongoDBのドキュメントの最大サイズはどれくらい?16MB制限の基本を解説

    MongoDBのドキュメントとはMongoDBにおける「ドキュメント」とは、コレクション内に格納される1件のレコードのことです。ドキュメントはJSONに似たBSON形式で表現され、波括弧({})で囲まれたデータ構造を持ちます。重要なポイントとして、各ドキュメントには16MBというサイズ上限が設けられています。この制限を超えるサイズのドキュメントを挿入しようとすると、エラーが発生します。なお、画像や動画などの大きなバイナリデータを扱いたい場合は、GridFSという仕組みを利用することで、16MBを超えるデータも保存可能です。ドキュメントを含むコレクションを作成するそれでは、実際にinsertOn

  2. MySQLの全データベースのサイズを一括で確認する方法

    はじめにMySQLサーバー上に存在するすべてのデータベースのサイズを一度に把握したい場面は多くあります。ディスク容量の管理やパフォーマンスの調査、不要なデータベースの特定などに役立ちます。この記事では、information_schema を活用して、全データベースのサイズを一覧表示するSQL文を紹介します。すべてのデータベースサイズを取得するSQL文以下のクエリを実行すると、各データベース名とその合計サイズ(MB単位)を確認できます。mysql> SELECT table_schema Database, -> SUM(data_length + index_length