前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB数据类型

MongoDB数据类型

作者头像
江南一点雨
发布2018-04-02 16:14:28
1.1K0
发布2018-04-02 16:14:28
举报
文章被收录于专栏:玩转JavaEE

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

本文是MongoDB系列的第三篇文章,了解前面的文章有助于更好的理解本文:


数字

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

代码语言:javascript
复制
db.sang_collec.insert({x:3.1415926})
db.sang_collec.insert({x:3})

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

代码语言:javascript
复制
db.sang_collec.insert({x:NumberInt(10)})
db.sang_collec.insert({x:NumberLong(12)})

字符串

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

代码语言:javascript
复制
db.sang_collec.insert({x:"hello MongoDB!"})

正则表达式

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

代码语言:javascript
复制
db.sang_collec.find({x:/^(hello)(.[a-zA-Z0-9])+/i})

数组

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

代码语言:javascript
复制
db.sang_collec.insert({x:[1,2,3,4,new Date()]})

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

日期

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

代码语言:javascript
复制
db.sang_collec.insert({x:new Date()})

内嵌文档

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

代码语言:javascript
复制
db.sang_collect.insert({name:"三国演义",author:{name:"罗贯中",age:99}});

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

ObjectId

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

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

二进制

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

代码

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

代码语言:javascript
复制
db.sang_collect.insert({x:function f1(a,b){return a+b;}});

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

参考资料:

1.《MongoDB权威指南第2版》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江南一点雨 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数字
  • 字符串
  • 正则表达式
  • 数组
  • 日期
  • 内嵌文档
  • ObjectId
  • 二进制
  • 代码
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档