当前位置: 首页 > news >正文

MongoDB聚合运算符:$binarySize

$binarySize聚合运算符返回给定字符串或二进制数据的字节数。

语法

{ $binarySize: <string or binData> }

使用

<string or bindData>可以是任何能够被解析为字符串和二进制数据的表达式;如果表达式解析为null,则$binarySize也返回null;如果表示解析为其他数据类型的值则报错。

当参数为字符串类型时,$binarySize运算符采用UTF-8编码字节对字符串进行统计,单个字符长度可能为1到4个字节。

例如,US-ASCII 字符用一个字节编码。带有变音标记的字符和其他拉丁字母字符(即英文字母以外的拉丁字符)使用两个字节编码。中文、日文和韩文字符通常需要三个字节,其他统一码平面(表情符号、数学符号等)需要四个字节。如下表:

表达式长度说明
{ $binarySize: "abcde" }5每个字符占用1字节
{ $binarySize: "Hello World!" }每个字符占用1字节
{ $binarySize: "cafeteria" }9每个字符占用1字节
{ $binarySize: "cafétéria" }11é字符占用2字节
{ $binarySize: "" }0空字符串返回0
{ $binarySize: "$€λG" }7占用3字节,λ占用2字节
{ $binarySize: "寿司" }6每个字符占用3字节

举例

使用下面的命令创建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, "") }
])

统计二进制字段长度

下面的聚合命令使用$project对集合文档进行重塑,输出name字段并使用$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([// 阶段1{ $project: { name: "$name", imageSize: { $binarySize: "$binary" } }  },// 阶段2{ $sort: { "imageSize" : -1 } },// 阶段3{ $limit: 1 }
])
阶段1

使用$project阶段和$binarySize运算符,输出文件名name和图片大小imageSize字段:

{ "_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 }
阶段2

使用$sort按照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 }
阶段3

使用limit只输出排序后第一个文档的内容:

{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }
http://www.lryc.cn/news/305282.html

相关文章:

  • Android的ViewModel
  • Android 圆环带刻度条进度动画效果实现
  • 94. 二叉树的中序遍历
  • 汽车信息安全概述
  • Linux——基础IO
  • 数据结构-数组
  • 【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)
  • C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码
  • C# 实现网页内容保存为图片并生成压缩包
  • C#_事件简述
  • C语言:指针(一)
  • 【leetcode刷题之路】面试经典150题(3)——哈希表+区间
  • 群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决
  • 9、使用 ChatGPT 的 GPT 制作自己的 GPT!
  • 企业微信应用开发:使用Cpolar域名配置进行本地接口回调的调试指南
  • js 可选链运算符(?.)空值合并运算符(??)逻辑空赋值运算符(??=)
  • vue 手势解锁功能
  • 介绍 CI / CD
  • Stable Diffusion 3 Early Preview发布
  • 【解决(几乎)任何机器学习问题】:特征选择
  • 24 双非计算机秋招总结
  • 用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增
  • 【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现
  • 【达梦数据库】查看pesg回滚段信息的视图和SQL
  • UML---活动图
  • 编程笔记 Golang基础 018 常量与变量
  • 如何使用Douglas-042为威胁搜索和事件应急响应提速
  • 华为配置WLAN AC和AP之间VPN穿越示例
  • 跨语言的序列化与反序列化
  • 软考-中级-系统集成2023年综合知识(三)