文档菜单
文档首页
/
MongoDB 手册
/ / /

$binarySize(聚合)

在本页面上

  • 定义
  • 行为
  • 示例
$binarySize

返回给定字符串或二进制数据值内容的大小(字节)。

$binarySize语法如下

{ $binarySize: <string or binData> }

参数可以是任何有效的表达式,只要解析结果为字符串或二进制数据值。有关表达式的更多信息,请参阅表达式运算符。

$binarySize的参数必须解析为以下之一

  • 字符串,

  • 二进制数据值,或者

  • null。

如果参数是字符串或二进制数据值,表达式返回参数的字节大小。

如果参数是null,表达式返回null

如果参数解析为任何其他数据类型,$binarySize将报错。

如果$binarySize的参数是字符串,该运算符会计算字符串中UTF-8编码的字节数,其中每个字符可能使用一到四个字节。

例如,US-ASCII字符使用一个字节编码。带重音符号的字符和额外的拉丁字母字符(英文字母表之外的拉丁字符)使用两个字节编码。中文、日文和韩文字符通常需要三个字节,而其他Unicode平面(表情符号、数学符号等)需要四个字节。

考虑以下示例

示例
结果
说明
{ $binarySize: "abcde" }
5
每个字符使用一个字节编码。
{ $binarySize: "Hello World!" }
12
每个字符使用一个字节编码。
{ $binarySize: "cafeteria" }
9
每个字符使用一个字节编码。
{ $binarySize: "cafétéria" }
11
é使用两个字节编码。
{ $binarySize: "" }
0
空字符串返回0。
{ $binarySize: "$€λG" }
7
欧元符号(€)使用三个字节进行编码。希腊字母λ(lambda)使用两个字节进行编码。
{ $binarySize: "寿司" }
6
每个字符都使用三个字节进行编码。

mongosh中,创建一个名为images的示例集合,包含以下文档

db.images.insertMany([
{ _id: 1, name: "cat.jpg", binary: new BinData(0, "OEJTfmD8twzaj/LPKLIVkA==")},
{ _id: 2, name: "big_ben.jpg", binary: new BinData(0, "aGVsZmRqYWZqYmxhaGJsYXJnYWZkYXJlcTU1NDE1Z2FmZCBmZGFmZGE=")},
{ _id: 3, name: "tea_set.jpg", binary: new BinData(0, "MyIRAFVEd2aImaq7zN3u/w==")},
{ _id: 4, name: "concert.jpg", binary: new BinData(0, "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=")},
{ _id: 5, name: "empty.jpg", binary: new BinData(0, "") }
])

以下聚合操作projects:

  • name字段

  • imageSize字段,使用$binarySize返回文档二进制字段的大小(以字节为单位)。

db.images.aggregate([
{
$project: {
"name": "$name",
"imageSize": { $binarySize: "$binary" }
}
}
])

此操作返回以下结果

{ "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 }
{ "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 }
{ "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 }
{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }
{ "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 }

以下管道返回二进制数据大小最大的图像

db.images.aggregate([
// First Stage
{ $project: { name: "$name", imageSize: { $binarySize: "$binary" } } },
// Second Stage
{ $sort: { "imageSize" : -1 } },
// Third Stage
{ $limit: 1 }
])
第一阶段

管道的第一阶段projects:

  • name字段

  • imageSize字段,使用$binarySize返回文档二进制字段的大小(以字节为单位)。

此阶段将以下文档输出到下一阶段

{ "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 }
{ "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 }
{ "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 }
{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }
{ "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 }
第二阶段

第二阶段sorts按imageSize降序排列文档。

此阶段将以下文档输出到下一阶段

{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }
{ "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 }
{ "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 }
{ "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 }
{ "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 }
第三阶段

第三阶段limits输出文档,仅返回按排序顺序出现的第一个文档

{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }

提示

另请参阅

返回

$avg

在本页面上