MongoDB入门教程三[数据类型]

MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象),不能完全满足复杂业务的需要,因此,BSON还提供日期、32位数字、64位数字等类型。以下对mongoDB的类型进行简要说明:

1、 Null[类型编号:10]

null类型用于表示空值或不存在的字段,如:{“x”:null}

2、 布尔类型 Boolean[类型编号:8]

布尔类型有两上值,’true’和’false’ ,如:{“x”:true}

3、 32位整数 32-bit integer[类型编号:16]

在由于mongoDB的控制台使用JS引擎进行输入,而JS仅支持64位浮点数,所以32位整数将会被自动转义;

4、 64位整数 64-bit integer[类型编号:18]

64位整数与32位整数一样,在MongoDB控制台使用时,会转义成64位浮点数。除外,如果数据库本身存储的数据类型无论是32位整数还是64位整数,使用MongoDB控制台获取后,更改其文档记录(即使没有修改整数本身,只修改了文档的其他部分),并重新使用控制台写回数据库,则其数据类型也会变成了64位浮点数。

除外,使用控制台查看一个64位整数时,可能会不正确定,原因是有些64位的整数不能精确表示为64位浮点数,而控制台呈示都是64位浮点数。

5、 数值类型:Double[类型编号:1]

在Mongo shell中,默认使用64位浮点型数据。因此,会有以下两种数值形式:

{"x" : 2.32}
//或
{"x" : 2}

对于整数类型,可以使用NumberInt()(位有符号整型)或NumberLong()(8位有符号整型)方法进行转换。示例如下:

{"x" : NumberInt(2)}
{"x" : NumberLong(2)}

6、 字符串类型:String[类型编号:2]

MongoDB中字符串类型使用UTF-8编码的字符表示。如:{“x”:”Hello QuickCodes”}

7、 符号 Symbol [类型编号:14]

在MongoDB控制台中不支持这种类型,将自动转义成字符串;

8、 对象id Object id[类型编号:7]

对象id是文档中唯一的12位的ID ,

在MongoDB来存储文档时,必须有一个“_id”键,这个键可以是任何类型,如果在增加文档时,没有这个_id键,则系统会使用ObjectId对象自动生成一个,在分布式环境中,不同的机器都能用全局唯一的同种方法来生成值,如:{"_id": ObjectId("57110709d1db0802a433a03c")}
其生成规则为:

0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11

时间戳     |     机器   |   PID |    计数器

前4位表示时间戳,时间戳以秒为单位,由于时间戳在前面,可以更好地反映出数据插入时的时间顺序,使的数据更容易查询,建议索引更加容易。

虽然系统会自动创建_id键,但在高并发的应用下建议使用客户端的驱动程序来创建,主要原因是,尽管ObjectId可以生成,但是系统在生成时,还是会产生开销,增加数据库的负担。

在高并发的分布式环境中,只使用以秒为单位的时间戳和机器不能区分其唯一性,故在其后面添加了PID,即MongoDB的进程标识符,前9个字符保证了同一秒钟不同机器不同进程产生的ObjectId是唯一,两位是一个自动递增的计数器,确保相同进程同一秒产生的ObjectId也不一样。

相关函数:ObjectId()、getTimestamp()、valueOf()

9 日期 Date [类型编号:9]

MongoDB中日期使用时间戳表示,单位为毫秒,不存储时区。 从标准纪元开始的毫秒数 { “date”:new Date()}

创建日期对象时应该使用new Date(),而非构造函数Date()。将构造函数作为函数时返回的日期格式是字符串,而非日期对象(与JavaScript工作机制有关)。

  • MongoDB中,日期类型是一个64位的整数,它代表的是距Unix epoch的毫秒数
  • MongoDB在存储时间时,先转化为UTC时间

北京时间(CST) = UTC + 8个小时

  • MongoDB Shell中可以使用new Date或ISODate来创建时间对象,在进行显示时,Shell会根据本地时间去设置显示日期对象

10 正则表达式 Regular Expression[类型编号:11]

文档中可以包含正则表达式,遵循 JavaScript 的语法。主要用于查询,使用正则表达式作为限定条件

例如:{name:/foo/  }    name字段含有foo的文档

{name:/foo/i }    name字段含有foo的文档,且不区分大小写

{name:/^foo/i }  name字段以foo开头,且不区分大小写

11 代码 JavaScript(Scope)[类型编号:15]

MongoDB的文档和代码中可以包括JavaScript代码。如:

{"x" : function(){ /*这里是一段JavaScript代码*/}}

12二进制数据 Binary data[类型编号:5]

可以保存由任意字节组成的字符串,例如:图片、视频等。任意字节的二进制串组成, shell 不支持 。二进制数据是一个二进制字节的字作串,要保存非UTF-8字符到数据库中,只能使用十进制数据。

13 最大值 Max Key [类型编号:127]

表示可能的最大值, shell 不支持

14 最小值 Min Key[类型编号:255]

表示可能的最小值, shell 不支持

15 未定义 undefined

{ “x”: undefined}

16 数组 Array[类型编号:4]

数据集可以用数组格式存储,与JavaSript中的数组表示相同。如:

{"x" : ["cloudev.top", "QuickCodes.Net"]}

数组中可以包含不同类型的数据元素,包括内嵌文档和数组等。所有MongoDB中键-值对支持的数据类型都可以用做数组的值。

  • 数组是使用方括号来表示的一组值,它既可以作为有序对象(列表、栈、队列),也能作为无序对象(如集合)来操作
  • 数组中可以包含不同数据类型的元素(字符串、浮点数、文档等)                 例如:[ 3.14,"hello",[1,2,3] ,{"key":"MongoDB"} ]
  • 针对数组MongoDB提供了许多特定的操作符,例如:$push,$pop,$pull,$slice,$addToSet等
  • MongoDB 可自动的为数组元素建立Multikey 索引

17内嵌文档

文档可以作为文档中某个 key 的value。在MongoDB文档总大小限制为16MB,建议使用子文档的形式组织数据,子文档查询效率要高于多键查询。

{

"_id": ObjectId("57110709d1db0802a433a03c"),

title:"Hello QuickCodes",

author:"Mac.Manon",

      comments:[

       {nickname:"Peter",comment:"Ok"},

       {nickname:"Tom",comment:"Dig"} ]

}

文档可以做为键的值,即:内嵌文档。MongoDB与关系型数据库相比,最大的优势就是内嵌文档。与关系型数据库的扁平化数据结构相比,使用内嵌文档可以数据的组织方式更加自然。

18.时间戳 Timestamp [类型编号:17]

时间戳类型有两部分组成:32 bit-Unix epoch 和 32 bit-自增序数(同一秒)

Timestmp 只供MongoDB 数据库服务内部使用,用于记录操作的详细时间;

Timestamp 类型和Date类型是没有关系的,对于我们来说使用更多的Date类型;

相关函数:Timestamp()

上述数据类型,均有一个类型编号,如字符串型的类型编号为2,下面的指令会在user表查找字段名称为name,且数据保存为字符串格式的数据:

db.user.find({name:{$type:2}})

时间: 2024-10-26 13:55:51

MongoDB入门教程三[数据类型]的相关文章

MongoDB入门教程一[文档与集合]

MongoDB 是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库相比有所不同.举个例子,在关系型数据库中,我们记录一个订单的信息,通常是这样设计表结构的: 设计一个订单基本信息表和一个订单明细表,1个订单有N个订单明细,这些订单明细通过外键关联到订单主表,所以要存储一个订单的信息,需要“1+N”条记录.在MongoDB中将订单基本信息和该订单的所有订单明细信息通过嵌套的json格式组织起来,保存为1个文档.也就是说在关系型数据库中需要“1+N”条记录存储的数据,MongoDB保存为

MongoDB入门教程二[MongoDB Shell 简介与使用]

MongoDB Shell 是MongoDB自带的JavaScript Shell,随MongoDB一同发布,它是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的管理操作(CURD.集群配置.状态查看等)都可以通过MongoDB Shell来完成. 今天介绍MongoDB的一些基本命令和小技巧: 1.利用help查看帮助: 输入:“db.user.find().help();”查看find()的帮助信息 2.基本命令: 连接/切换数据库       例如:u

MongoDB入门学习(三):MongoDB的增删查改

对于我们这种菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改. 因为MongoDB存储数据都是以文档的模式,所以在操作它的数据时,也是以文档为单位的.那么我们实现增删查改也是以文档为基础,不知道文档是什么的同学可以看看上篇介绍的基本概念. 1.插入文档 向MongoDB集合中插入文档的基本方法是insert: 单个插入 > document = {key : value} > db.collecti

Elasticsearch入门教程(三):Elasticsearch索引&映射

原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79213163 索引概念简介 通常说的索引有两种词性,名称和动词. 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,

jQuery 入门教程(三): Selectors

jQuery Selector 是jQuery库中非常重要的一个组成部分. jQuery Selector 用来选择某个HTML元素,其基本语句和CSS的选择器(Selector)是一样的,所有jQuery selector 都是以$()开始. 选择HTML标记 选择某个HTML元素的方法是直接使用该元素的标记名称,比如选择所有<p>元素 $("p") 下面的例子当用户点击一个按钮时,隐藏所有的<p>元素 $(document).ready(function()

BootStrap入门教程 (三)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

MongoDb 入门教程

MongoDb 入门教程 目录 MongoDb的基本数据结构 安装MongoDb服务器 连接MongoDb服务器 MongoDb创建数据库 MongoDb创建表 MongoDb插入数据 MongoDb查询数据 范围操作符 AND操作符 OR操作符 排序 聚合 MongoDb更新数据 MongoDb删除数据 常用的DDL命令 MongoDb图形化工具 总结 参考资料 MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数

无废话ExtJs 入门教程三[窗体:Window组件]

无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/19

Git的入门教程&lt;三&gt;

Git 的入门教程<三> 4> git远程仓库的使用 续之前的(http://blog.csdn.net/xuheazx/article/details/43229781) 4.2 git远程服务器的搭建 我目前的服务器版本: Linux hehe.xu 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux 因为是为了做教程,所以采用的是虚拟机来进行搭建git服务器. 4.2.1