Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$bsonSize(集計)

項目一覧

  • 定義
  • 動作
$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 }

Tip

以下も参照してください。

次のパイプラインは、バイト数が最大の 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 }

Tip

以下も参照してください。

戻る

$bottomN

項目一覧