《MongoDB权威指南》学习整理----MongoDB中的基本数据类型

MongoDB数据类型介绍

monggoDB中的数据都存储在文档中,传输、存储方式使用了类似于JSON称为BSON的数据格式,但数据类型更加丰富,下面对mongodb中的数据类型以及类型在shell中的处理进行说明:

  • Null

用于表示空或者不存在的数据。例如:{'x':null}

  • Boolean

通用的布尔类型,true或者false.例如:{'x':false}

  • 32位整数

在shell中没有此类型,java中有interger。shell会自动转换该类型为64位整数。

  • 64位整数

shell中没有此类型,shell使用一个特殊的内嵌文档来表示64位整数。此类型的数据在shell中查看的时候,当可以正确的使用64位浮点数表示时,就直接使用数字表示;如果不能使用64位浮点数正确表示,mongodb的内嵌文档会表示此数据。例如9223372036854775807在shell中的表示为:

db.nums.findOne()

{

"_id":ObjectId("xxxxxxxxx"),

"myInteger":{

"floatApprox":9223372036854775807,

"top":2147483647,

"bottom":4294967295

}

}

注意,如果用shell编辑更改后,该数字会变成64位浮点数。

  • 64位浮点数

shell中所有的数字都是该类型。由于shell中只支持此类型而mongoDB支持3中数字类型,那么当mongodb中的32/64位整数在shell中操作后,使用shell再次存入mongodb中时,所有的数据类型都会转化为64位浮点数。所以最好不要轻易的在shell中对数字进行修改操作

  • 字符串

最常见的数据类型之一。

  • 符号

shell中不支持该类型,会自动转化为字符串

  • 对象id

对象id是文档的12字节的唯一ID。每个集合中只能有唯一的objectId。12字节的意义:

前4字节是从标准纪元开始的时间戳,4-6字节表示机器名的散列值,7、8字节表示进程ID,后边3个字节表示计数器

  • 日期

日期类型存储的是从标准纪元开始的毫秒数,没有时区使用new Date('xxxx')来创建日期对象,而不是Date('xxxx')。同时,在mongoDB中存储的日期类型是没有时区的,如果需要,添加一个新的键来表示时区。

  • 正则表达式

与JS中的正则表达式相同。

  • 代码

文档中可以保存JS代码。

  • 二进制数据

可以任意存储二进制数据,但是在shell中无法使用

  • 最大值

文档中的特殊类型,shell中无法使用。

  • 最小值

文档中的特殊类型,shell无法使用。

  • 未定义

也就是JS中的undefined,注意,和JS中一样null和undefined是不一样的。

  • 数组

值的集合或者列表可以表示成数组,如同所有的弱类型语言,python、php、js,数组元素可以是不同类型的对象。例如:{'x':['a','b','c']}

  • 内嵌文档

文档可以包含别的文档,也可以作为值嵌入到父文档中。例如:{'x':{'foo':'bar'}}


不同数据类型的比较

由于MongoDB中不同文档的同一个keyvalue数据类型可以不同,当我们根据某个key查询的时候会发生不同数据类型之间的比较。所以MongoDB内部设定了数据类型间的大小,顺序如下:

最小值<null<数字(32位整数、63位整形、64位浮点数)<字符串<对象/文档<数组<二进制数据<对象ID<布尔型<日期型<时间戳<正则<最大值


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值