$bsonSize (aggregation)
On this page本页内容
Definition定义
$bsonSize
New in version 4.4.4.4版新增。Returns the size in bytes of a given document (i.e. bsontype当编码为BSON时,返回给定文档(即bsontype对象)的大小(以字节为单位)。Object
) when encoded as BSON.You can use您可以使用$bsonSize
as an alternative to thebsonSize()
method.$bsonSize
作为bsonSize()
方法的替代方法。$bsonSize
has the following syntax:具有以下语法:{ $bsonSize: <object> }
The argument can be any valid expression as long as it resolves to either an object or参数可以是任何有效的表达式,只要它解析为对象或null
.null
即可。For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。
Behavior行为
If the argument is an object, the expression returns the size of the object in bytes when the object is encoded as BSON.如果参数是对象,则当对象编码为BSON时,表达式将返回对象的大小(以字节为单位)。
If the argument is 如果参数为null
, the expression returns null
.null
,则表达式将返回null
。
If the argument resolves to a data type other than an object or 如果参数解析为对象以外的数据类型或null
, $bsonSize
errors.null
,则$bsonSize
错误。
Examples示例
Return Sizes of Documents文件的返回尺寸
In 在mongosh
, create a sample collection named employees
with the following documents: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."
}
}
]);
The following aggregation 以下聚合投影了:projects
:
Thename
fieldname
字段Theobject_size
field, which uses$bsonSize
to return the size of the document in bytes. The$$ROOT
variable references the document currently being processed by the pipeline.object_size
字段,它使用$bsonSize
返回文档的大小(以字节为单位)。$$ROOT
变量引用管道当前正在处理的文档。To learn more about variables in the aggregation pipeline, see Variables in Aggregation Expressions.要了解有关聚合管道中变量的更多信息,请参阅聚合表达式中的变量。
db.employees.aggregate([
{
"$project": {
"name": 1,
"object_size": { $bsonSize: "$$ROOT" }
}
}
])
The operation returns the following result:该操作返回以下结果:
{ "_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 }
Return Combined Size of All Documents in a Collection返回集合中所有文档的组合大小
The following pipeline returns the combined size of all of the documents in the 以下管道返回employees
collection:employees
集合中所有文档的组合大小:
db.employees.aggregate([
{
"$group": {
"_id": null,
"combined_object_size": { $sum: { $bsonSize: "$$ROOT" } }
}
}
])
When you specify an 当您将$group
_id value of null
, or any other constant value, the $group
stage calculates accumulated values for all the input documents as a whole.$group
_id
值指定为null
或任何其他常数值时,$group
阶段将计算所有输入文档作为一个整体的累积值。
The operation uses the 该操作使用$sum
operator to calculate the combined $bsonSize
of each document in the collection. $sum
运算符来计算集合中每个文档的组合$bsonSize
。The $$ROOT
variable references the document currently being processed by the pipeline. To learn more about variables in the aggregation pipeline, see Variables in Aggregation Expressions.$$ROOT
变量引用管道当前正在处理的文档。要了解有关聚合管道中变量的更多信息,请参阅聚合表达式中的变量。
The operation returns the following result:该操作返回以下结果:
{ "_id" : null, "combined_object_size" : 789 }
Return Document with Largest Specified Field指定字段最大的退货单
The following pipeline returns the document with the largest 以下管道返回具有以字节为单位的最大current_task
field in bytes: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 }
])
First Stage第一阶段-
The first stage of the pipeline管道projects
:projects
的第一阶段:Thename
fieldname
字段Thetask_object_size
field, which uses$bsonSize
to return the size of the document'scurrent_task
field in bytes.task_object_size
字段,它使用$bsonSize
返回文档的current_task
字段的大小(以字节为单位)。
This stage outputs the following documents to the next stage:本阶段向下一阶段输出以下文件:{ "_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 } Second Stage第二阶段-
The second stage第二阶段按sorts
the documents bytask_object_size
in descending order.task_object_size
降序对文档进行排序。This stage outputs the following documents to the next stage:本阶段向下一阶段输出以下文件:{ "_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 } Third Stage第三阶段-
The third stage第三阶段limits
the output documents to only return the document appearing first in the sort order:限制
输出文档仅返回排序顺序中第一个出现的文档:{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }