定義
- $bsonSize
- 指定されたドキュメントのサイズをバイト単位で返します( bsontype - Object) BSONとしてエンコードされた場合)- bsonSize()メソッドの代替として- $bsonSizeを使用できます。- $bsonSizeの構文は次のとおりです。- { $bsonSize: <object> } - 引数は、オブジェクトまたは - nullのどちらかに解決されるものであれば、あらゆる有効な式にすることができます。 式の詳細については、「式 」を参照してください。
動作
引数がオブジェクトの場合、式はオブジェクトがBSONとしてエンコードされているときのオブジェクトのサイズをバイト単位で返します。
引数が null の場合、式は null を返します。
引数がオブジェクトまたはnull以外のデータ型に解決される場合、 $bsonSizeエラーが発生します。
例
ドキュメントのサイズを返す
mongoshでは、次のドキュメントを含むemployeesという名前のサンプル コレクションが作成されます。
 db.employees.insertMany([    {      "_id": 1,      "name": "Alice", "email": "alice@company.com", "position": "Software Developer",      "current_task": {        "project_id": 1,        "project_name": "Aggregation Improvements",        "project_duration": 5,        "hours": 20      }    },    {      "_id": 2,      "name": "Bob", "email": "bob@company.com", "position": "Sales",      "current_task": {        "project_id": 2,        "project_name": "Write Blog Posts",        "project_duration": 2,        "hours": 10,        "notes": "Progress is slow. Waiting for feedback."      }    },    {      "_id": 3,      "name": "Charlie", "email": "charlie@company.com", "position": "HR (On Leave)",      "current_task": null    },    {      "_id": 4,      "name": "Dianne", "email": "diane@company.com", "position": "Web Designer",      "current_task": {        "project_id": 3,        "project_name": "Update Home Page",        "notes": "Need to scope this project."      }    } ]); 
次の集計 projects:
- nameフィールド
- object_sizeフィールド。- $bsonSizeを使用してドキュメントのサイズをバイト単位で返します。- $$ROOT変数は、パイプラインによって現在処理されているドキュメントを参照します。 集計パイプラインの変数の詳細については、「集計式の変数 」を参照してください。
db.employees.aggregate([   {     "$project": {       "name": 1,       "object_size": { $bsonSize: "$$ROOT" }     }   } ]) 
この操作では、次の結果を返します。
{ "_id" : 1, "name" : "Alice", "object_size" : 222 } { "_id" : 2, "name" : "Bob", "object_size" : 248 } { "_id" : 3, "name" : "Charlie", "object_size" : 112 } { "_id" : 4, "name" : "Dianne", "object_size" : 207 } 
コレクション内のすべてのドキュメントの合計サイズを返す
次のパイプラインは、 employees コレクション内のすべてのドキュメントの合計サイズを返します。
db.employees.aggregate([   {     "$group": {       "_id": null,       "combined_object_size": { $sum: { $bsonSize: "$$ROOT" } }     }   } ]) 
$group _id 値として null またはその他の定数値を指定すると、 $group ステージではすべての入力ドキュメント全体の累積値が計算されます。
この操作では$sum演算子を使用して、コレクション内の各ドキュメントの結合された$bsonSizeを計算します。 $$ROOT変数は、パイプラインによって現在処理されているドキュメントを参照します。 集計パイプラインの変数の詳細については、「集計式の変数 」を参照してください。
この操作では、次の結果を返します。
{ "_id" : null, "combined_object_size" : 789 } 
指定したフィールドが最大のドキュメントを返す
次のパイプラインは、バイト数が最大の current_task フィールドを持つドキュメントを返します。
db.employees.aggregate([    // First Stage    { $project: { name: "$name", task_object_size: { $bsonSize: "$current_task" } }  },    // Second Stage    { $sort: { "task_object_size" : -1 } },    // Third Stage    { $limit: 1 } ]) 
- 第 1 ステージ
- パイプラインの第一ステージ - projects:- nameフィールド
- task_object_sizeフィールド。- $bsonSizeを使用してドキュメントの- current_taskフィールドのサイズをバイト単位で返します。
 - このステージでは、次のドキュメントを次のステージに出力します。 - { "_id" : 1, "name" : "Alice", "task_object_size" : 109 } - { "_id" : 2, "name" : "Bob", "task_object_size" : 152 } - { "_id" : 3, "name" : "Charlie", "task_object_size" : null } - { "_id" : 4, "name" : "Dianne", "task_object_size" : 99 } 
- 第 2 ステージ
- 第二ステージでは、 - sortsのドキュメントを- task_object_sizeで降順で並べ替えます。- このステージでは、次のドキュメントを次のステージに出力します。 - { "_id" : 2, "name" : "Bob", "task_object_size" : 152 } - { "_id" : 1, "name" : "Alice", "task_object_size" : 109 } - { "_id" : 4, "name" : "Dianne", "task_object_size" : 99 } - { "_id" : 3, "name" : "Charlie", "task_object_size" : null } 
- 第 3 ステージ
- 第三ステージ - limitsでは、出力ドキュメントをソート順で最初に表示されるドキュメントのみ返します。- { "_id" : 2, "name" : "Bob", "task_object_size" : 152 }