MongoDB基本数据类型

MongoDB基本数据类型

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

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

数字

db.wang_collect.insert({x:3.1415926})
bd.wang_collect.insert({x:3})

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

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

字符串

直接存储字符串

db.wang_collect.insert({x:"Hello World"})

正则表达式

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

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

数组

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

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

日期

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

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

内嵌文档

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

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

ObjectId

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

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

二进制

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

代码

文档中也可以包括 JavaScript 代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值