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

MongoDBのconvertToCappedコマンドで既存コレクションをCappedコレクションに変換する方法

MongoDBでは、convertToCappedコマンドを使うことで、すでに存在する通常のコレクションをCappedコレクション(サイズ上限付きコレクション)へ変換できます。この記事では、サンプルコレクションの作成からconvertToCappedの実行、stats()による結果確認までの一連の手順を解説します。

Cappedコレクションとは

Cappedコレクションは、指定した最大サイズを超えると古いドキュメントから順に自動削除される、固定サイズのリングバッファ型コレクションです。ログ保存のように「最新データだけを保持したい」ケースに適しています。

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

まず、通常のコレクションにドキュメントを挿入します。

> db.demo260.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e47b1181627c0c63e7dba9b")
}
> db.demo260.insertOne({"Name":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e47b11c1627c0c63e7dba9c")
}
> db.demo260.insertOne({"Name":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e47b11f1627c0c63e7dba9d")
}

2. find()で全ドキュメントを表示

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

> db.demo260.find();

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

{ "_id" : ObjectId("5e47b1181627c0c63e7dba9b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e47b11c1627c0c63e7dba9c"), "Name" : "Bob" }
{ "_id" : ObjectId("5e47b11f1627c0c63e7dba9d"), "Name" : "David" }

3. convertToCappedの実行

続いて、runCommand()経由でconvertToCappedを呼び出します。sizeには、Cappedコレクションの上限サイズをバイト単位で指定します。

> db.runCommand( { convertToCapped: 'demo260', size: 8345 } );
{ "ok" : 1 }

"ok" : 1が返れば、変換は成功です。

4. stats()で変換結果を確認

stats()を使えば、コレクションが正しくCapped化されたかどうかを確認できます。

> db.demo260.stats()

長大な出力の中でも、特に注目すべき主要フィールドは以下の通りです。

{
   "ns" : "test.demo260",
   "size" : 112,
   "count" : 3,
   "avgObjSize" : 37,
   "storageSize" : 16384,
   "capped" : true,
   "max" : -1,
   "maxSize" : 8448,
   ...
}
  • capped : true — コレクションがCappedコレクションとして認識されていることを示します。
  • maxSize : 8448 — 実際に割り当てられた上限サイズです。指定した8345バイトは、WiredTigerのアロケーション単位(4KB)に合わせて切り上げられます。
  • max : -1 — ドキュメント件数による上限は設定されていないことを示します。

なお、完全な出力には、WiredTigerストレージエンジンに関する詳細な統計情報(キャッシュ、圧縮、B-tree、カーソル操作など)も含まれます。

まとめ

既存コレクションをCappedコレクションに変換するには、db.runCommand({ convertToCapped: 'コレクション名', size: バイト数 })を実行します。変換後はstats()の出力で"capped" : trueとなっていることを確認しましょう。また、指定したサイズはストレージエンジンのアロケーション単位に切り上げられる点にも注意が必要です。

  1. 【MongoDB】集計パイプラインの$groupを使って日付ごとにデータをグループ化する方法

    MongoDBで日付ごとにドキュメントをグループ化したい場合は、aggregate()メソッド内で$group演算子を使用します。本記事では、サンプルコードを交えながら、コレクションの作成から日付単位でのグループ化までの一連の手順をわかりやすく解説します。1. サンプルコレクションの作成まず、日付情報を含むドキュメントを格納するコレクションを用意しましょう。以下の例では、db.demo657というコレクションに対して、id、Name、DueDate(ISODate形式)の各フィールドを持つドキュメントを、insertOne()メソッドで3件挿入しています。> db.demo657.ins

  2. MongoDBの上限付きコレクション(Capped Collection)は使える?作成方法と動作を実例で解説

    MongoDBの上限付きコレクション(Capped Collection)とは?はい、MongoDBではcapped(上限付き)コレクションを使用できます。Cappedコレクションは固定サイズのコレクションであり、挿入順に基づいてドキュメントを挿入・取得する高スループットな操作をサポートするのが特徴です。コレクションが指定したサイズまたはドキュメント数の上限に達すると、最も古いドキュメントから自動的に削除され、新しいドキュメントが追加されていきます。そのため、ログ管理やキャッシュのように「最新データだけを保持したい」ケースに適しています。Cappedコレクションの作成方法db.createCo