微信搜索
江南一点雨

MongoDB数据类型

MongoDB 系列其他文章:

1.Linux上安装MongoDB
2.MongoDB基本操作
3.MongoDB数据类型
4.MongoDB文档更新操作
5.MongoDB文档查询操作(一)
6.MongoDB文档查询操作(二)
7.MongoDB文档查询操作(三)
8.MongoDB查看执行计划
9.初识MongoDB中的索引
10.MongoDB中各种类型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)
13.MongoDB管道操作符(二)
14.MongoDB中MapReduce使用
15.MongoDB副本集搭建
16.MongoDB副本集配置
17.MongoDB副本集其他细节
18.初识MongoDB分片
19.Java操作MongoDB

上篇文章我们介绍了 MongoDB 的最基本的增删改查操作,也介绍了一些基础的概念,MongoDB 中每条记录称作一个文档,这个文档和我们平时用的 JSON 有点像,但也不完全一样。

JSON 是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言,JSON 易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,但是 JSON 也有它的局限性,比如它只有 null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,无法区分浮点数和整数,也没法表示正则表达式或者函数。由于这些局限性,BSON 闪亮登场啦,BSON 是一种类 JSON 的二进制形式的存储格式,简称 Binary JSON,它和 JSON 一样,支持内嵌的文档对象和数组对象,但是 BSON 有 JSON 没有的一些数据类型,如 Date 和 BinData 类型,MongoDB 使用 BSON 做为文档数据存储和网络传输格式。本文我们就来说说 MongoDB 中都支持哪些数据类型,其实也是来看看 BSON 有哪些好玩的地方。

数字

shell 默认使用 64 位浮点型数值,如下:

db.sang_collec.insert({x:3.1415926})
db.sang_collec.insert({x:3})

p238

对于整型值,我们可以使用 NumberInt 或者 NumberLong 表示,如下:

db.sang_collec.insert({x:NumberInt(10)})
db.sang_collec.insert({x:NumberLong(12)})

p239

字符串

字符串也可以直接存储,如下:

db.sang_collec.insert({x:"hello MongoDB!"})

p240

正则表达式

正则表达式主要用在查询里边,查询时我们可以使用正则表达式,语法和 JavaScript 中正则表达式的语法相同,比如查询所有 key 为 x ,value 以 hello 开始的文档且不区分大小写:

db.sang_collec.find({x:/^(hello)(.[a-zA-Z0-9])+/i})

p241

数组

数组一样也是被支持的,如下:

db.sang_collec.insert({x:[1,2,3,4,new Date()]})

242

数组中的数据类型可以是多种多样的。

日期

MongoDB 支持 Date 类型的数据,可以直接 new 一个 Date 对象,如下:

db.sang_collec.insert({x:new Date()})

p243

内嵌文档

一个文档也可以作为另一个文档的 value,这个其实很好理解,如下:

db.sang_collect.insert({name:"三国演义",author:{name:"罗贯中",age:99}});

p244
书有一个属性是作者,作者又有 name,年龄等属性。

ObjectId

我们在前面提到过,我们每次插入一条数据系统都会自动帮我们插入一个 _id 键,这个键的值不可以重复,它可以是任何类型的,我们也可以手动的插入,默认情况下它的数据类型是 ObjectId,由于 MongoDB 在设计之初就是用作分布式数据库,所以使用 ObjectId 可以避免不同数据库中 _id 的重复(如果使用自增的方式在分布式系统中就会出现重复的 _id 的值),这个特点有点类似于 Git 中的版本号和 Svn 中版本号的区别。

ObjectId 使用 12 字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储 24 个十六进制数字组成的字符串,在这 24 个字符串中,前 8 位表示时间戳,接下来 6 位是一个机器码,接下来 4 位表示进程 id,最后 6 位表示计数器。

二进制

MongoDB 中也可以存储二进制数据,不过这种情况并不多,二进制数据的存储不能在 shell 中操作,我们在后面的代码中会介绍这种存储方式。

代码

文档中也可以包括 JavaScript 代码,如下:

db.sang_collect.insert({x:function f1(a,b){return a+b;}});

p245

好了,MongoDB 的数据类型我们就先介绍这么多,这里只是做一个大致的了解,后文我们还会再详细的说到这些东西的详细使用方式。小伙伴们有问题欢迎留言讨论。

参考资料:

  1. 《MongoDB权威指南第2版》
赞(0)
未经允许不得转载:江南一点雨 » MongoDB数据类型
分享到: 更多 (0)
扫码关注微信公众号【江南一点雨】,回复 1024,查看松哥原创 Java 实战教程(图文+视频)。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注 Java 一百年

关注我们国际站