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 数据类型的比较顺序

  1. MinKey (internal type)
  2. Null
  3. Numbers (ints, longs, doubles, decimals)
  4. Symbol, String
  5. Object
  6. Array
  7. BinData
  8. ObjectId
  9. Boolean
  10. Date
  11. Timestamp
  12. Regular Expression
  13. MaxKey (internal type)

后续再展开讲

MongoDB(6)- BSON 数据类型的更多相关文章

  1. MongoDB之bson的介绍

    MongoDB之bson的介绍 1. 什么是bson BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JS ...

  2. MongoDB数据库的数据类型和$type操作符

    前面的话 本文将详细介绍MongoDB数据库的数据类型和$type操作符 数据类型 MongoDB支持以下数据类型 类型 数字 备注 Double 1 双精度浮点数 - 此类型用于存储浮点值 Stri ...

  3. MongoDB(四):数据类型、插入文档、查询文档

    1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...

  4. 处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常

    微软代码范例中的一个Bug 处理Mongodb的Bson中ObjectId反序列化异常 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/f ...

  5. Java 构造 BSON 数据类型

    Java 构造 BSON 数据类型 整数/符浮点数 Java BSON 构造整数/符浮点数类型 // {a:123, b:3.14} BSONObject obj = new BasicBSONObj ...

  6. MongoDB导入bson文件(元数据),mongorestore命令行方式导入

    MongoDB导入bson文件(元数据),mongorestore命令行方式导入 不推荐使用MongoDB Compass等图形化数据库管理软件,例如MongoDB Compass只能导入json和c ...

  7. MongoDB中的数据类型

    mongoDB中存储的数据单元被称作文档.文档的格式与JSON很类似,只不过由于JSON表达的数据类型范围太小(null,boolean,numeric,string和object),mongoDB对 ...

  8. mongoDB支持的数据类型

    下表为MongoDB中常用的几种数据类型. 数据类型 描述 String 字符串.存储数据常用的数据类型.在 MongoDB 中,UTF-8 编码的字符串才是合法的. Integer 整型数值.用于存 ...

  9. MongoDB学习【二】—MongoDB基础和数据类型

    一.MongoDB基础知识 在MongoDB中相关术语的解释和sql术语对应关系 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table col ...

随机推荐

  1. 计算距离2020年圣诞节还有x天x时x分x秒

    //计算两者相差毫秒数 //创建当前时间和圣诞节时间的Date对象 var d1=new Date(); var d2=new Date('2020/12/25'); //计算相差的毫秒 var d= ...

  2. 虚拟基站(VRS)

      虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...

  3. 『go成长之路』 defer 作用、典型用法以及多个defer调用顺序,附加defer避坑点,拿来吧你

    预习内容 defer 的作用有哪些? 多个 defer 的执行顺序是怎样的? defer,return,函数返回值 三者之间的执行顺序 defer的作用 go中的defer是延迟函数,一般是用于释放资 ...

  4. 53. 最大子序和(剑指 Offer 42)

    53. 最大子序和(剑指 Offer 42) 知识点:数组:前缀和:哨兵:动态规划:贪心:分治: 题目描述 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求 ...

  5. Bugku-misc 1-8题总结

    1.签到题 略过 2.这是一张单纯的图片 拉入winhex,在最后面有一段Uniocde编码,解码得到flag. 3.隐写 题目是隐写,binwalk打开分析 得到两个Zlib(提供数据压缩用的函式库 ...

  6. Apache Superset1.2.0教程(四)—— CentOS环境安装

    前文中,我们已经在windows环境进行了superset的安装,也对图表功能进行了展示.但是在平时使用以及生产环境中,还是需要在centos环境下进行操作. 本文将带大家详解在centos7环境进行 ...

  7. Maven 基础标签之版本管理和冲突解决

    前言 我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线 maven基础 Maven 是一个项目管理工具,主要用于项目构建,依赖管理, ...

  8. java中sort方法的自定义比较器写法(转载)

    java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...

  9. 我写一篇文章就是要批评CSDN! 因为蓝湖3.0的更新

    对于开发者,经常会使用,学习到各种环境语言和工具 我们不只是在不断的在搬运知识,更多时候我们也是在 分享我们学到的"新知识", 当我们有幸觉得自己发现了新的知识与技术时,作为分享者 ...

  10. SpringBoot开发十九-添加评论

    需求介绍 熟悉事务管理,并且应用到添加评论的功能. 数据层:增加评论数据,修改帖子的评论数量 业务层:处理添加评论的业务,先增加评论再更新帖子的评论数量(因为用到了两个DML操作所以要用到事务管理) ...