MongoDBの上限付きコレクション(Capped Collection)に最大ドキュメント数(max)を設定する方法
MongoDBのCapped Collectionとは
上限付きコレクション(Capped Collection)は、あらかじめサイズが固定された特殊なコレクションです。ドキュメントを挿入順に保存し、挿入順での取得を伴う高スループットな操作に適しているため、ログの保管やキャッシュ、キュー処理などの用途でよく利用されます。
Capped Collectionは、指定したサイズ、または最大ドキュメント数に達すると、古いドキュメントから自動的に削除され、新しいドキュメントのための領域を確保します(FIFO方式の動作)。
Capped Collectionにmax(最大ドキュメント数)を設定する構文
Capped Collectionに最大ドキュメント数(max)を設定するには、db.createCollection()メソッドでcapped: trueを指定したうえで、sizeとmaxを渡します。
db.createCollection("yourCollectionName", {capped:true, size:yourSizeValue, max:yourMaxValue});
なお、maxを指定する場合はsizeの指定が必須です。また、サイズ制限がドキュメント数の制限よりも優先されるため、maxに達する前にsizeの上限に到達した場合も、古いドキュメントから順に削除されていきます。
実行例:setMaxDemoコレクションを作成する
それでは、上記の構文を使って実際にmaxを設定してみましょう。次のクエリでは、「setMaxDemo」という名前のCapped Collectionを作成し、サイズを948575757バイト、最大ドキュメント数を2000件に設定しています。
> db.createCollection("setMaxDemo", {capped:true, size:948575757, max:2000});
このクエリを実行すると、次のような出力が得られます。
{ "ok" : 1 }
stats()で設定内容を確認する
作成したコレクションの詳細情報を確認するには、stats()メソッドを使用します。
> db.setMaxDemo.stats();
実行すると、Capped Collectionの設定値を含む統計情報が出力されます。出力にはWiredTigerストレージエンジンの詳細な内部統計も大量に含まれますが、ここでは主要なフィールドを抜粋して示します。
{
"ns" : "test.setMaxDemo",
"size" : 0,
"count" : 0,
"storageSize" : 4096,
"capped" : true,
"max" : 2000,
"maxSize" : 948576000,
...
}
主要なフィールドの意味
- ns:コレクションの名前空間(データベース名.コレクション名)
- size / count:現在のデータサイズとドキュメント数(作成直後はどちらも0)
- capped:Capped Collectionとして作成されていることを示すフラグ(true)
- max:設定した最大ドキュメント数(この例では2000)
- maxSize:実際に割り当てられた最大サイズ。sizeで指定した値が内部的に丸められた値になります
まとめ
MongoDBのCapped Collectionに最大ドキュメント数を設定するには、db.createCollection()でcapped: true、size、maxを指定するだけです。作成後はstats()メソッドで設定が正しく反映されているかを確認できます。maxに達したドキュメントは古いものから自動的に削除されるため、ログ管理や履歴データの保持など、一定件数のみを保持したいユースケースに最適です。
-
MongoDBでサーバーレコードを含むコレクションのステータスを非アクティブに更新する方法
MongoDBでサーバーのステータスを非アクティブに更新する方法サーバーレコードを含むMongoDBコレクションでは、配列形式で保存されたサーバー情報の中から特定のサーバーだけを探し出し、そのステータスを「Active(アクティブ)」から「Inactive(非アクティブ)」へ変更したいケースがあります。この記事では、位置指定演算子「$」を使って、配列内の条件に一致した要素だけを効率的に更新する手順を解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サーバー情報(serverInformation)を配列として持つドキュメントを挿入し、コレクシ
-
MongoDBコレクションにインデックスを作成する方法
MongoDBコレクションにインデックスを作成する方法MongoDBでインデックスを作成するには、createIndex()メソッドを使用します。インデックスを適切に設定することで、クエリの検索速度を大幅に向上させることができます。まず、ドキュメントを含むコレクションに対してインデックスを作成してみましょう。以下の例では、details.idフィールドに対して昇順(1)のインデックスを作成しています。> db.demo702.createIndex({details.id:1});{ createdCollectionAutomatically : tr