MongoDBでコレクション内のドキュメント数を制限する方法(Capped Collectionの使い方)
MongoDBでコレクション内のドキュメント数を制限するには?
MongoDBのコレクションに保存できるドキュメントの数を制限したい場合は、「capped: true」を指定してCapped Collection(キャップドコレクション)を作成します。作成時にsize(最大サイズ)やmax(最大ドキュメント数)を設定することで、コレクションの容量と件数の上限を定義できます。
Capped Collectionとは
Capped Collectionは、挿入順にドキュメントを保持し、上限に達すると最も古いドキュメントから自動的に削除される固定サイズのコレクションです。ログデータやキャッシュなど、最新のデータだけを保持したいシナリオに適しています。
Capped Collectionの作成例
以下のように db.createCollection() メソッドを使って、max: 4(最大4件)、size: 5 バイトのCapped Collectionを作成します。
> db.createCollection( "demo683", { capped: true, size: 5, max: 4 } )
{ "ok" : 1 }次に、複数のドキュメントを挿入してみましょう。
> db.demo683.insertOne({Value:100});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468afa7e81adc6a0b394e")
}
> db.demo683.insertOne({Value:500});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468b0a7e81adc6a0b394f")
}
> db.demo683.insertOne({Value:1000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468b1a7e81adc6a0b3950")
}
> db.demo683.insertOne({Value:400});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468b2a7e81adc6a0b3951")
}
> db.demo683.insertOne({Value:800});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468b3a7e81adc6a0b3952")
}
> db.demo683.insertOne({Value:700});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea468b4a7e81adc6a0b3953")
}find()メソッドで全ドキュメントを表示する
挿入したすべてのドキュメントは、find() メソッドを使って確認できます。
> db.demo683.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ea468b1a7e81adc6a0b3950"), "Value" : 1000 }
{ "_id" : ObjectId("5ea468b2a7e81adc6a0b3951"), "Value" : 400 }
{ "_id" : ObjectId("5ea468b3a7e81adc6a0b3952"), "Value" : 800 }
{ "_id" : ObjectId("5ea468b4a7e81adc6a0b3953"), "Value" : 700 }結果の解説
合計6件のドキュメントを挿入しましたが、表示されているのは後から挿入された4件だけです。これは、max: 4 という上限を設定したため、最初に挿入した Value: 100 と Value: 500 の2件が、新しいドキュメントの追加に伴って自動的に削除されたことを示しています。
なお、実際の運用では size パラメータも重要です。MongoDBは size と max の両方の制限をチェックし、どちらかの上限に先に達した時点で古いドキュメントの削除を行います。そのため、意図した動作を得るためには、ドキュメントの平均サイズを見積もった上で、十分な size 値を設定することをおすすめします。
-
MongoDBでコレクションの行数(ドキュメント数)をカウントする方法
MongoDBでコレクション内のドキュメント数(行数)を取得するには、count()メソッドを使用します。まず、サンプルとなるコレクションにドキュメントを挿入してみましょう。1. コレクションへのドキュメント挿入insertOne()メソッドを使って、複数のドキュメントを順番に登録します。> db.demo664.insertOne({_id:1,ClientName:Chris}); { acknowledged : true, insertedId : 1 } > db.demo664.insertOne({_id:2,ClientName:Bob}); { acknowled
-
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。サンプルコレクションの作成insertOne()メソッドを使用して、ドキュメントを1件ずつ挿入します。> db.demo712.insertOne({Name:John}); { acknowledged : true, insertedId : ObjectId(5ea85f675d33e20ed1