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 }
相关文章:
MongoDB聚合运算符:$binarySize
$binarySize聚合运算符返回给定字符串或二进制数据的字节数。 语法 { $binarySize: <string or binData> }使用 <string or bindData>可以是任何能够被解析为字符串和二进制数据的表达式;如果表达式解析为null,则$binarySize也返回null&a…...
Android的ViewModel
前言 在Compose的学习中,我们在可组合函数中使用rememberSaveable保存应用数据,但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大,您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…...
Android 圆环带刻度条进度动画效果实现
效果图 需求是根据传感器做一个重力球效果,先实现了动画后续加上跟传感器联动. 又是摆烂的一天, 尚能呼吸,未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…...
94. 二叉树的中序遍历
// 定义一个名为Solution的类,用于解决二叉树的中序遍历问题 class Solution { // 定义一个公共方法,输入是一个二叉树的根节点,返回一个包含中序遍历结果的整数列表 public List<Integer> inorderTraversal(TreeNode root) { // …...
汽车信息安全概述
随着智能网联汽车的迅猛发展,车辆不再是简单的交通工具,而是集数据收集、处理与通信于一体的移动智能终端。然而,这一变革也使得汽车成为黑客攻击的新目标。汽车信息安全问题日益凸显,成为行业关注的焦点。本文将深入探讨汽车信息…...
Linux——基础IO
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C语言IO1、写文件2、读文件3、stdin & stdout & stderr 二、系统文件I/O1、写文件…...
数据结构-数组
一,数组基础及注意事项 1,用来储存一组相同的类型的数据. 2,在内存中,分配连续的空姐,数组创建时要指定容量(大小). 3,创建格式: 数据类型 []数组名 int[] arr new int[10] int[] arr2 {1,2,3,4}. 4,索引--访问数组时通过索引进行操作. (注意:一定要理解索引的含义,在数据结…...
【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)
基于Springboot的智慧外贸平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧外贸平台 本系统分为系统功能模块、管理员功能模块、买家功能模块以及商家功能模块。 系统功能模块:在平台首页可以…...
C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码
1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) ,又称洪水填充算法,是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…...
C# 实现网页内容保存为图片并生成压缩包
目录 应用场景 实现代码 扩展功能(生成压缩包) 小结 应用场景 我们在一个求职简历打印的项目功能里,需要根据一定的查询条件,得到结果并批量导出指定格式的文件。导出的格式可能有多种,比如WORD格式、EXCEL格式、PDF格式等,…...
C#_事件简述
事件模型简述 C#中事件的运行模式为"发布订阅模型",事件触发者称为"发布者",事件处理者称为"订阅者" 事件模型的五个组成部分 事件(成员)事件的拥有者(类/对象)事件的响应…...
C语言:指针(一)
目录 1.内存和地址2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 解引用操作符(*) 2.3 指针变量的大小 3.指针变量的类型和意义3.1 指针的解引用3.2 指针 -指…...
【leetcode刷题之路】面试经典150题(3)——哈希表+区间
文章目录 5 哈希表5.1 【哈希表】赎金信5.2 【数学】同构字符串5.3 【数学】单词规律5.4 【哈希表】有效的字母异位词5.5 【哈希表】字母异位词分组5.6 【双指针】两数之和5.7 【数学】快乐数5.8 【哈希表】219. 存在重复元素 II5.9 【数学】最长连续序列 6 区间6.1 【数学】汇…...
群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决
宝塔的安装就不在这赘述了,只说下,启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码,无法登陆 然后点忘记密码,由于是docker安装的,根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…...
9、使用 ChatGPT 的 GPT 制作自己的 GPT!
使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…...
企业微信应用开发:使用Cpolar域名配置进行本地接口回调的调试指南
文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…...
js 可选链运算符(?.)空值合并运算符(??)逻辑空赋值运算符(??=)
可选链运算符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起…...
vue 手势解锁功能
效果 实现 <script setup lang"ts"> const canvasRef ref<HTMLCanvasElement>() const ctx ref<CanvasRenderingContext2D | null>(null) const width px2px(600) const height px2px(700) const radius ref(px2px(50))const init () > …...
介绍 CI / CD
目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…...
Stable Diffusion 3 Early Preview发布
2月22日,Stability AI 发布了 Stable Diffusion 3 early preview,这是一种开放权重的下一代图像合成模型。据报道,它继承了其前身,生成了详细的多主题图像,并提高了文本生成的质量和准确性。这一简短的公告并未附带公开…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
