上篇文章咱们介绍了MongoDB的最基本的增删改查操做,也介绍了一些基础的概念,MongoDB中每条记录称做一个文档,这个文档和咱们平时用的JSON有点像,但也不彻底同样。JSON是一种轻量级的数据交换格式。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,JSON易于阅读和编写,同时也易于机器解析和生成,并有效地提高网络传输效率,可是JSON也有它的局限性,好比它只有null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,没法区分浮点数和整数,也无法表示正则表达式或者函数。因为这些局限性,BSON闪亮登场啦,BSON是一种类JSON的二进制形式的存储格式,简称Binary JSON,它和JSON同样,支持内嵌的文档对象和数组对象,可是BSON有JSON没有的一些数据类型,如Date和BinData类型,MongoDB使用BSON作为文档数据存储和网络传输格式。本文咱们就来讲说MongoDB中都支持哪些数据类型,其实也是来看看BSON有哪些好玩的地方。 正则表达式
本文是MongoDB系列的第三篇文章,了解前面的文章有助于更好的理解本文:shell
1.Linux上安装MongoDB
2.MongoDB基本操做数据库
shell默认使用64位浮点型数值,以下:数组
db.sang_collec.insert({x:3.1415926}) db.sang_collec.insert({x:3})
对于整型值,咱们可使用NumberInt或者NumberLong表示,以下:网络
db.sang_collec.insert({x:NumberInt(10)}) db.sang_collec.insert({x:NumberLong(12)})
字符串也能够直接存储,以下:分布式
db.sang_collec.insert({x:"hello MongoDB!"})
正则表达式主要用在查询里边,查询时咱们可使用正则表达式,语法和JavaScript中正则表达式的语法相同,好比查询全部key为x,value以hello开始的文档且不区分大小写:函数
db.sang_collec.find({x:/^(hello)(.[a-zA-Z0-9])+/i})
数组同样也是被支持的,以下:spa
db.sang_collec.insert({x:[1,2,3,4,new Date()]})
数组中的数据类型能够是多种多样的。设计
MongoDB支持Date类型的数据,能够直接new一个Date对象,以下:code
db.sang_collec.insert({x:new Date()})
一个文档也能够做为另外一个文档的value,这个其实很好理解,以下:
db.sang_collect.insert({name:"三国演义",author:{name:"罗贯中",age:99}});
书有一个属性是做者,做者又有name,年龄等属性。
咱们在前面提到过,咱们每次插入一条数据系统都会自动帮咱们插入一个_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;}});
好了,MongoDB的数据类型咱们就先介绍这么多,这里只是作一个大体的了解,后文咱们还会再详细的说到这些东西的详细使用方式。小伙伴们有问题欢迎留言讨论。
参考资料:
1.《MongoDB权威指南第2版》
更多资料请关注公众号: