MongoDB数据模型

来源:互联网 发布:钢筋 计算 软件多少钱 编辑:程序博客网 时间:2024/05/18 01:07

MongoDB的文档(Document)与集合(Collection)

文档:MongoDB是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库比有所不同。



文档MongoDB最核心的概念,本质上是一种类JSON的BSON格式的数据。

BSON是一种类JSON的二进制格式的数据,它可以理解为在JSON基础上添加了一些新的数据类型,包括日期、int32、int64等

BSON是由一组组键值对组成,它具有轻量性、可遍历性和高效性三个特征。可遍历性是MongoDB将BSON作为数据存储的主要原因

{

field1:value1,

field2:value2,

field3:value3,

fieldn:valuen

  }

使用MongoDB文档时需要注意以下问题:

mongoDB中写操作的原子性限制在文档级别,对文档的保存、修改、删除等都是原子操作

单个文档占用的存储空间不能超过16M

MongoDB会尽量保持文档被插入时键值对的顺序

关于文档键的命名需要注意以下几点:

_id是系统保留的关键字,它是默认的主键,该值在集合中必须唯一,且不可更改

键不能包含\0或空字符,这个自负用于表示键的结尾

不能以$开头

不能包含.(点号)

键是区分大小写的且不能重复 

集合:

把一组相关的文档放到一起组成了集合,如果将MongoDB的一个文档比喻为关系型数据库的一行,那么一个集合就相当于一张表。

MongoDB的集合是模式自由的,一个集合里面的文档可以是各式各样的。例如:下面的两个文档可以出现在同一集合中。

{“name”:”arthur”}

{“name”:”arthur”,”sex”:”male”}

MongoDB提供了一些特殊功能的集合,例如:capped collection、system.indexes、system.namespaces等。

关于集合的命名需要注意以下几点:

集合名不能是空字符串(“”)

集合名不能包含有\0字符(空字符),该字符表示集合名的结尾

集合名不能以“system.”开头,次前缀是系统本身保留的

集合名不能包含$字符(注:可包含.

数据库:

多个文档组成集合,而多个集合组成了数据库。一个MongoDB实例可以承载多个数据库,每个数据库都有独立的权限,在磁盘上,不同的数据库也可以放置在不同的文件夹中(启动时加directoryperdb选项

为了更好的组织数据,一般情况下,会把属于同一个应用程序(或同一种业务类型)的所有数据放到一个数据库中

关于数据库的命名需要注意一下几点:

不能是空字符串(“”)

不能以$开头

不能包含.(点号)和空字符串

数据库名字区分大小写(建议数据库名全部使用小写

数据名长度最多为64个字符

不要与系统保留的数据库名字相同,这些数据库包括:admin、local、config等

命名空间:

把数据库名添加到集合名前面,中间用点号连接,得到集合的完全限定名,就是命名空间,例如:命名空间mymongo.log

需要说明的是,点号还可以出现在集合名字中,例如:mymongo.log.info,可以将info集合看作是log的子集合。

使用子集合可以使我们更好的组织数据,使数据的结构更加清晰明了。

==================================================================================================================

MongoDB数据类型

简介:BSON可以理解为在JSON基础上添加了一些新的数据类型,包括Date,正则表达式,对数值类型的进一步划分等。     

基本数据类型:

null表示空值或不存在的字段 例如:db.collection.find({“x”:null})

布尔有两个值true或false例如:{“x”:true}

数值类型支持32-int、64-int以及64-double

注:JavaScript只支持64位浮点数

例如:{“x”:10}{“x”:NumberInt(10)}

字符串使用UTF-8对字符串进行编码 例如:{“x”:”Hello MongoDB”}

二进制数据可以保存由任意字节组成的字符串,例如:图片、视频等

正则表达式主要用于查询,使用正则表达式作为限定条件

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

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

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

JavaScript代码文档中可以包含任意的JavaScript代码

例如:{“func”:function(){} }

Date日期:

MongoDB中,日期类型是一个64为的整数,它代表的是距Unix epoch的毫秒数

MongoDB在存储时间时,先转化为UTC时间

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

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

Timestamp:

时间戳类型有两部分组成:

32bit-Nnix epoch | 32bit-自增序数(同一秒)

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

Timestamp类型和Date类型是没有关系的

相关函数:Timestamp()

ObjectId:

ObjectId由24个16进制字符构成,每个字节存储两位十六进制数字,总共需要12字节存储空间

例如:{“_id”:ObjectId(“55212126e053e401e3efe46”)}

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

内嵌文档:

文档可以作为键的值,这样的文档称为内嵌文档。内嵌文档可以使数据不用保存成扁平结构的键值对,从而使数据组织方式更加自然。

数组:

数组是使用方括号来表示的一组值,它既可以作为有序对象(列表、栈、队列),也能作为无需对象(如集合)来操作

数组中可以包含不同数据类型的元素(字符串、浮点数、文档等)

例如:[3.14,”hello”,[1,2,3],{“key”:”MongoDB”}

针对数组MongoDB提供了许多特定的操作符,例如:$puah,$pop,$pull,$slice,$addToSet等

MongoDB可自动的为数组元素建立Multikey索引

==================================================================================================================

MongoDB Shell简介与使用

简介:

MongoDB Shell是MongoDB自带的JavaScript Shell,随MongoDB一同发布,他是MongoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的管理操作(CURD、集群配置、状态查看等)都可以通过MongoDB Shell来完成。

MongoDB Shell = JavaScript解释器 + MongoDB客户端

基本功能:

执行JavaScript命令

MongoDB客户端——基本命令

连接/切换数据库例如:use mymongo;

数据插入例如:db.user.insert(obj);

数据查询例如:db.user.find(query);

数据更新例如:db.user.update(query, obj);

数据删除例如:db.user.remove(query);

使用技巧:

help查看帮助

执行脚本

直接运行例如:mongo [quiet] script.js(quiet参数可选,加上不会输出MongoDB Shell默认的提示)

script.js

运行结果

交互式运行例如:load(“script.js”)

执行命令行程序例如:run(“ls”)

.mongorc.js文件使用

MongoDB启动时会自动加载用户主目录下的mongorc.js文件,我们可以将频繁使用的功能放入到该脚本中

编辑复合变量EDITOR

MongoDB Shell对多行输入使很不友好的,所以对于大块的代码和对象,我们放到编辑器中进行编辑

首先向系统变量中添加一个EDITOR变量

mongorc.js中添加EDITOR变量

新建一条文档,使用edit命令编辑这条文档

查看修改后的文档

可以看到文档已经成功修改


0 0
原创粉丝点击