MongoDB(6)- BSON 数据类型

摘要:
BSONBSON是一种二进制序列化格式。它用于在MongoDB中存储文档并进行远程过程调用。它类似于JSON的数据结构,但支持更丰富的数据类型。数据类型。序列号别名。评论。Double1 Double String2字符串对象3对象数组4数组Binarydata5 inData Undefined6未定义。ObjectId7objectId Boole已弃用

BSON

  • BSON是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用
  • 跟 JSON 的数据结构很像,但是支持更丰富的数据类型

数据类型

数据类型序号别名备注
Double1double 
String2string 
Object3object 
Array4array 
Binary data5binData 
Undefined6undefined弃用
ObjectId7objectId 
Boolean8bool 
Date9date 
Null10null 
Regular Expression11regex 
DBPointer12dbPointer弃用
JavaScript13javascript 
Symbol14symbol弃用
JavaScript code with scope15javascriptWithScope4.4 弃用
32-bit integer16int 
Timestamp17timestamp 
64-bit integer18long 
Decimal12819decimal 
Min key-1minKey 
Max key127maxKey   

序号有什么用?

到时候想通过 $type 来指定某个数据类型的时候可以用序号,而不用敲完整的字符串

MongoDB(6)- BSON 数据类型第1张

可以看到,通过 $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() 

MongoDB(6)- BSON 数据类型第2张

两种函数构造的 Date,值是同个类型的

以字符串形式返回日期值

mydate1.toString()

MongoDB(6)- BSON 数据类型第3张

返回日期值的月份部分

月是零索引,因此一月是月0

mydate1.getMonth()

MongoDB(6)- BSON 数据类型第4张

不同 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 数据类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明jquery实战——弹出框拖拽效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

hbase 取多个版本数据

http://jiajun.iteye.com/blog/945358 HBase如何存取多个版本的值? 废话少说,一般情况下使用Put的这个方法保存一个版本: Java代码 /** *AddthespecifiedcolumnandvaluetothisPutoperation. *@paramfamilyfamilyname *@paramq...

使用VS2008开发OPC客户端程序

使用Rockwell的 RsiOPCAuto.dll 或者Siemens的 Interop.OPCSiemensDAAutomation.dll时, 若直接拷贝的Dll使用,需要注册后才可添加引用到VS2008.注册:D:\>regsvr32 rsiopcauto.dll 已下为OPC读取标签的核心内容: 使用了Hash表存储标签位置对应标签多代表...

日期类型存储成字符串类型的格式问题

问题 ConversionException: Could not convert '2017-8-28 0:00:00' to java.util.Date  at com.vaadin.data.util.converter.StringToDateConverter.convertToModel(StringToDateConverter.java:...

[解决方法] spring-mongo mongodb 2.x 升级到 3.x 配置中出现的一些问题

问题1: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roleDaoImpl': Injection of resource dependencies failed; nested exception is org.sprin...

【改进】用Log4net建立日志记录

上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code。 然后经过前辈们的提点,今天使用了Log4net进行日志的写入,发现非常的便捷,同时也集成了对于日志的控制,减少因为日志写入而发生的一系列不该有的错误。 网上也有很多教程,...

js获取本月,本季度,上个季度,本周,上周的起始和结束时间

1 /* 获得某月的天数 */ 2 function getMonthDays(myMonth) { 3 var nowYear = new Date().getFullYear(); //当前年 4 var monthStartDate = new Date(nowYear, myMonth, 1)...