MongoDB(6)- BSON 数据类型
BSON
- BSON是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用
- 跟 JSON 的数据结构很像,但是支持更丰富的数据类型
数据类型
数据类型 | 序号 | 别名 | 备注 |
Double | 1 | double | |
String | 2 | string | |
Object | 3 | object | |
Array | 4 | array | |
Binary data | 5 | binData | |
Undefined | 6 | undefined | 弃用 |
ObjectId | 7 | objectId | |
Boolean | 8 | bool | |
Date | 9 | date | |
Null | 10 | null | |
Regular Expression | 11 | regex | |
DBPointer | 12 | dbPointer | 弃用 |
JavaScript | 13 | javascript | |
Symbol | 14 | symbol | 弃用 |
JavaScript code with scope | 15 | javascriptWithScope | 4.4 弃用 |
32-bit integer | 16 | int | |
Timestamp | 17 | timestamp | |
64-bit integer | 18 | long | |
Decimal128 | 19 | decimal | |
Min key | -1 | minKey | |
Max key | 127 | maxKey |
序号有什么用?
到时候想通过 $type 来指定某个数据类型的时候可以用序号,而不用敲完整的字符串
可以看到,通过 $type 来指定数据类型的时候,可以用别名,也可以用序号
ObjectId
ObjectId 很小,可能是唯一的,生成速度快,并且有序,ObjectId 值的长度为 12 个字节,包括
- 一个 4 字节的时间戳值,代表 ObjectId 的创建,以 Unix 纪元以来的秒数为单位
- 一个 5 字节的随机值
- 一个 3 字节递增计数器,初始化为随机值
给 _id 添加一个 ObjectId 的好处
- 对存储 ObjectId 值的 _id 字段进行排序大致相当于按创建时间排序
- 在 mongo shell 中,可以使用 ObjectId.getTimestamp() 方法访问 ObjectId 的创建时间
ObjectId("60b441609c297cd9d2ecf60f").getTimestamp()
ISODate("2021-05-31T01:52:32Z")
String
- BSON 字符串是UTF-8
- 在序列化和反序列化 BSON 时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8
- 这使得在 BSON 字符串可以轻松存储大多数国际字
- 此外,MongoDB $regex 查询在 regex 字符串中支持 UTF-8
Timestamps
- BSON 有一个特殊的时间戳类型供内部 MongoDB 使用,并且与常规 Date 类型无关
- 此内部时间戳类型是一个 64 位值
- 前 32 位是 time_t 值(至 1970 年依赖的秒数),后 32 位是给定秒内操作的递增序数
- 在单个 mongod 实例中,时间戳值始终是唯一的
new Timestamp()
在插入包含具有空时间戳值的顶级字段的文档时,MongoDB将用当前时间戳值替换空时间戳值
db.myNewCollection1.insert({test:new timestamp()}) db.myNewCollection1.find()
{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }
Date
BSON Date 是一个 64 位整数,表示自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数
在 shell 构造一个 date
var mydate1 = new Date()
在 mongo shell 中使用 ISODate() 构造函数构造一个 Date
var mydate2 = ISODate()
两种函数构造的 Date,值是同个类型的
以字符串形式返回日期值
mydate1.toString()
返回日期值的月份部分
月是零索引,因此一月是月0
mydate1.getMonth()
不同 BSON 数据类型的比较顺序
- MinKey (internal type)
- Null
- Numbers (ints, longs, doubles, decimals)
- Symbol, String
- Object
- Array
- BinData
- ObjectId
- Boolean
- Date
- Timestamp
- Regular Expression
- MaxKey (internal type)
后续再展开讲
MongoDB(6)- BSON 数据类型的更多相关文章
- MongoDB之bson的介绍
MongoDB之bson的介绍 1. 什么是bson BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JS ...
- MongoDB数据库的数据类型和$type操作符
前面的话 本文将详细介绍MongoDB数据库的数据类型和$type操作符 数据类型 MongoDB支持以下数据类型 类型 数字 备注 Double 1 双精度浮点数 - 此类型用于存储浮点值 Stri ...
- MongoDB(四):数据类型、插入文档、查询文档
1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...
- 处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常
微软代码范例中的一个Bug 处理Mongodb的Bson中ObjectId反序列化异常 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/f ...
- Java 构造 BSON 数据类型
Java 构造 BSON 数据类型 整数/符浮点数 Java BSON 构造整数/符浮点数类型 // {a:123, b:3.14} BSONObject obj = new BasicBSONObj ...
- MongoDB导入bson文件(元数据),mongorestore命令行方式导入
MongoDB导入bson文件(元数据),mongorestore命令行方式导入 不推荐使用MongoDB Compass等图形化数据库管理软件,例如MongoDB Compass只能导入json和c ...
- MongoDB中的数据类型
mongoDB中存储的数据单元被称作文档.文档的格式与JSON很类似,只不过由于JSON表达的数据类型范围太小(null,boolean,numeric,string和object),mongoDB对 ...
- mongoDB支持的数据类型
下表为MongoDB中常用的几种数据类型. 数据类型 描述 String 字符串.存储数据常用的数据类型.在 MongoDB 中,UTF-8 编码的字符串才是合法的. Integer 整型数值.用于存 ...
- MongoDB学习【二】—MongoDB基础和数据类型
一.MongoDB基础知识 在MongoDB中相关术语的解释和sql术语对应关系 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table col ...
随机推荐
- 计算距离2020年圣诞节还有x天x时x分x秒
//计算两者相差毫秒数 //创建当前时间和圣诞节时间的Date对象 var d1=new Date(); var d2=new Date('2020/12/25'); //计算相差的毫秒 var d= ...
- 虚拟基站(VRS)
虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...
- 『go成长之路』 defer 作用、典型用法以及多个defer调用顺序,附加defer避坑点,拿来吧你
预习内容 defer 的作用有哪些? 多个 defer 的执行顺序是怎样的? defer,return,函数返回值 三者之间的执行顺序 defer的作用 go中的defer是延迟函数,一般是用于释放资 ...
- 53. 最大子序和(剑指 Offer 42)
53. 最大子序和(剑指 Offer 42) 知识点:数组:前缀和:哨兵:动态规划:贪心:分治: 题目描述 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求 ...
- Bugku-misc 1-8题总结
1.签到题 略过 2.这是一张单纯的图片 拉入winhex,在最后面有一段Uniocde编码,解码得到flag. 3.隐写 题目是隐写,binwalk打开分析 得到两个Zlib(提供数据压缩用的函式库 ...
- Apache Superset1.2.0教程(四)—— CentOS环境安装
前文中,我们已经在windows环境进行了superset的安装,也对图表功能进行了展示.但是在平时使用以及生产环境中,还是需要在centos环境下进行操作. 本文将带大家详解在centos7环境进行 ...
- Maven 基础标签之版本管理和冲突解决
前言 我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线 maven基础 Maven 是一个项目管理工具,主要用于项目构建,依赖管理, ...
- java中sort方法的自定义比较器写法(转载)
java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...
- 我写一篇文章就是要批评CSDN! 因为蓝湖3.0的更新
对于开发者,经常会使用,学习到各种环境语言和工具 我们不只是在不断的在搬运知识,更多时候我们也是在 分享我们学到的"新知识", 当我们有幸觉得自己发现了新的知识与技术时,作为分享者 ...
- SpringBoot开发十九-添加评论
需求介绍 熟悉事务管理,并且应用到添加评论的功能. 数据层:增加评论数据,修改帖子的评论数量 业务层:处理添加评论的业务,先增加评论再更新帖子的评论数量(因为用到了两个DML操作所以要用到事务管理) ...