前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MongoDB(6)- BSON 数据类型

MongoDB(6)- BSON 数据类型

作者头像
小菠萝测试笔记
发布2021-06-09 22:13:25
发布2021-06-09 22:13:25
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

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 的创建时间
代码语言:javascript
代码运行次数:0
运行
复制
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将用当前时间戳值替换空时间戳值

代码语言:javascript
代码运行次数:0
运行
复制
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
代码语言:javascript
代码运行次数:0
运行
复制
var mydate1 = new Date()
在 mongo shell 中使用 ISODate() 构造函数构造一个 Date
代码语言:javascript
代码运行次数:0
运行
复制
var mydate2 = ISODate() 

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

以字符串形式返回日期值
代码语言:javascript
代码运行次数:0
运行
复制
mydate1.toString()
返回日期值的月份部分

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

代码语言:javascript
代码运行次数: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)

后续再展开讲

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BSON
  • 数据类型
    • 序号有什么用?
  • ObjectId
    • 给 _id 添加一个 ObjectId 的好处
  • String
  • Timestamps
    • new Timestamp()
  • Date
    • 在 shell 构造一个 date
    • 在 mongo shell 中使用 ISODate() 构造函数构造一个 Date
    • 以字符串形式返回日期值
    • 返回日期值的月份部分
    • 不同 BSON 数据类型的比较顺序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档