【MongoDB】挿入時にレコード総数を制限する方法 ― Capped Collectionの基本と使い方
MongoDBでドキュメントを挿入しながらレコードの総数を制限したい場合は、capped:trueを指定し、size(コレクションのサイズ上限:バイト単位)とmax(最大ドキュメント数)を設定します。こうして作成されるのが「Capped Collection(キャップドコレクション)」です。上限に達すると、最も古いドキュメントから順に自動的に削除され、常に新しいデータだけが保持される仕組みになっています。
Capped Collectionの作成
capped:true を設定し、size と max をそれぞれ4に指定して、コレクション「demo297」を作成しましょう。
> db.createCollection("demo297", {capped:true, size:4,max:4});
{ "ok" : 1 }ドキュメントの挿入
続いて、insertOne() メソッドを使って、5件のドキュメントを順番に挿入していきます。
> db.demo297.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d54385d93261e4bc9ea43")
}
> db.demo297.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d543e5d93261e4bc9ea44")
}
> db.demo297.insertOne({"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d543e5d93261e4bc9ea45")
}
> db.demo297.insertOne({"Name":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d543f5d93261e4bc9ea46")
}
> db.demo297.insertOne({"Name":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d54405d93261e4bc9ea47")
}find()メソッドで全ドキュメントを確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo297.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e4d543e5d93261e4bc9ea44"), "Name" : "Bob" }
{ "_id" : ObjectId("5e4d543e5d93261e4bc9ea45"), "Name" : "Mike" }
{ "_id" : ObjectId("5e4d543f5d93261e4bc9ea46"), "Name" : "Sam" }
{ "_id" : ObjectId("5e4d54405d93261e4bc9ea47"), "Name" : "John" }結果の解説
合計5件のドキュメントを挿入しましたが、出力結果には最初に挿入した「Chris」が含まれていません。これは max:4 の上限に達したため、最も古いドキュメントから自動的に削除されたことを示しています。
このようにCapped Collectionを活用すれば、アクセスログや操作履歴など「最新の一定件数だけ保持できればよい」データを効率的に管理できます。上限を超えたデータは自動的にローテーションされるため、手動での削除処理が不要になる点も大きなメリットです。
-
MongoDBでフィールドの戻り値を制限するクエリの書き方($slice演算子の使い方)
MongoDBでフィールドの戻り値を制限するクエリの書き方MongoDBで配列フィールドの要素数を制限して取得したい場合は、$slice演算子を使用します。この演算子を活用することで、クエリ結果として返す配列の要素数を柔軟にコントロールできます。ここでは、具体的な手順をサンプルコードとともに解説します。1. コレクションとドキュメントの作成まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。> db.demo594.insertOne(... {... &n
-
【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方
MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...