MongoDBでクエリ結果の全ドキュメントサイズを取得する方法
MongoDBでクエリに含まれるすべてのドキュメントの合計サイズを取得するには、各ドキュメントに対して Object.bsonsize() を使ってサイズを計算し、ループ処理で合計していく必要があります。
この記事では、実際にコレクションを作成しながら、全ドキュメントのサイズを取得する手順を解説します。
サンプルコレクションの作成
まずはドキュメントを含むコレクションを作成しましょう。以下のように insertOne() メソッドを使って3件のドキュメントを挿入します。
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"John","StudentSubject":["MongoDB","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0c1edc6604c74817cd7")
}
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"Larry","StudentSubject":["MySQL","PHP"],"StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0d9edc6604c74817cd8")
}
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"Chris","StudentSubject":["SQL Server","C#"],"StudentAge":23,"StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0fbedc6604c74817cd9")
}登録したドキュメントの確認
find() メソッドと pretty() メソッドを組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.sizeOfAllDocumentsDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd3c0c1edc6604c74817cd7"),
"StudentFirstName" : "John",
"StudentSubject" : [
"MongoDB",
"Java"
]
}
{
"_id" : ObjectId("5cd3c0d9edc6604c74817cd8"),
"StudentFirstName" : "Larry",
"StudentSubject" : [
"MySQL",
"PHP"
],
"StudentAge" : 21
}
{
"_id" : ObjectId("5cd3c0fbedc6604c74817cd9"),
"StudentFirstName" : "Chris",
"StudentSubject" : [
"SQL Server",
"C#"
],
"StudentAge" : 23,
"StudentCountryName" : "US"
}全ドキュメントのサイズを取得するクエリ
それでは本題です。クエリ結果に含まれるすべてのドキュメントの合計サイズを取得するには、forEach() で各ドキュメントを順番に処理し、Object.bsonsize() の戻り値をカウンター変数に加算していきます。
> var allDocument = db.sizeOfAllDocumentsDemo.find();
> var counter = 0;
> allDocument.forEach(
... function(myDocument) {
... counter = counter+Object.bsonsize(myDocument)
... }
... );
> print(counter);このスクリプトを実行すると、すべてのドキュメントの合計サイズ(バイト単位)が出力されます。
358
ポイントの解説
- Object.bsonsize(): 引数に渡されたドキュメントのBSON形式でのサイズをバイト単位で返すメソッドです。ディスク上やメモリ内で実際に占めるサイズを知るのに役立ちます。
- forEach() ループ: カーソルから取得した各ドキュメントに対して関数を実行するため、集計処理に適しています。
- 活用シーン: MongoDBでは1つのドキュメントは最大16MBという制限があるため、ドキュメントサイズの把握は設計やパフォーマンスチューニングにおいて重要です。
このように、ループ処理と Object.bsonsize() を組み合わせることで、クエリ結果全体のドキュメントサイズを簡単に集計できます。特定のコレクションのデータ量を見積もりたい場合などにぜひ活用してください。
-
MongoDBですべてのドキュメントにわたる個別(ユニーク)な値をカウントする方法
MongoDBでコレクション内のすべてのドキュメントにわたって、重複を除いた個別(ユニーク)な値の数をカウントしたい場合は、aggregate()メソッドを使用します。この記事では、実際のコード例とともに、その手順をわかりやすく解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使って、デモ用のコレクション「demo718」にドキュメントを挿入します。 > db.demo718.insertOne( ... { ... id:101, ... details: ... { ... Oth
-
MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ
この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを