MongoDBで条件を指定してコレクションのサイズを取得する方法
MongoDBでは、特定の条件に一致するドキュメントの合計サイズを取得したいケースがあります。本記事では、forEach()とObject.bsonsize()を組み合わせて、条件を指定したコレクションのサイズを取得する方法を、実際の実行例とともに解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使って、以下のようにドキュメントを1件ずつ挿入します。
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"John", "Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e3db64a577be5a2bc16")
}
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"Chris", "Age":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e45b64a577be5a2bc17")
}
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"Robert", "Age":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e4db64a577be5a2bc18")
}
登録済みドキュメントの確認
find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。
> db.mongoDBCollectionSizeDemo.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cf23e3db64a577be5a2bc16"), "Name" : "John", "Age" : 23 }
{ "_id" : ObjectId("5cf23e45b64a577be5a2bc17"), "Name" : "Chris", "Age" : 24 }
{ "_id" : ObjectId("5cf23e4db64a577be5a2bc18"), "Name" : "Robert", "Age" : 26 }
条件を指定してコレクションのサイズを取得する
続いて、条件に一致するドキュメントのサイズを取得します。ここでは「Name」が「Robert」であるドキュメントを対象とし、find()で抽出した各ドキュメントに対してObject.bsonsize()でBSONサイズを計算し、その合計を求めます。
> var collectionsize = 0;
> db.mongoDBCollectionSizeDemo.find({Name:'Robert'}).forEach(function(d) {
var s = Object.bsonsize(d);
collectionsize = collectionsize + s;
})
> print(collectionsize);
実行結果は以下のとおりです。
52
ポイント解説
Object.bsonsize()は、ドキュメントをBSON形式にシリアライズした際のバイト数を返す関数です。forEach()を使うことで、条件に一致した各ドキュメントを順番に処理できます。- 変数
collectionsizeに各ドキュメントのサイズを加算していき、最終的な合計サイズを算出しています。
この手法は、「特定のユーザーのデータ量を調べたい」「条件に一致するドキュメントのストレージ使用量を把握したい」といった場面で非常に役立ちます。条件式を変更すれば、任意の検索条件に対応したサイズ集計も簡単に行えます。
-
MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ
この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを
-
MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説
スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある