您的位置:首页 > 数据库 > Mongodb

MongoDB入门

2016-06-02 11:09 190 查看
为什么要学习MongoDB?传统的SQL方式操作数据库过于复杂、要考虑的问题太多、容易出错MongoDB的Bson方式操作数据库学习简易,容易上手只要设计合理,MongoDB效率可以远超MySql完全开源免费各种编程语言完全兼容
什么是MongoDB?MongoDB是一个基于分布式文件存储的开源数据库系统。在高负载的情况下(需要更多的存储空间和更强的处理能力),添加更多的节点(这就是所谓的分片),可以保证服务器性能。MongoDB是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库相比有所不同。
MongoDB关系型数据库
DataBaseDataBase数据库
CollectionTable数据库表/集合
Document/BSON DocumentRecord/Row数据库记录行/文档
fieldColumn数据字段/域
IndexIndex索引
table joins表连接,MongoDB不支持
MonggoDB文档文档是MongoDB最核心的概念,本质上时一种类JSON的BSON格式的数据。BSON是一种类JSON的二进制格式数据,它可以理解为在JSON基础上添加了一些新的数据类型,包括日期、int32、int64等。BSON是由一组组键值对组成,它具有轻量性、可遍历性和高效性三个特征。可遍历性是MongoDB将BSON作为数据存储的主要原因。BSON官网地址:http://bsonspec.org/使用MongoDB文档时需要注意以下问题:①MongoDB中写操作的原子性限制在文档级别,对文档的保存、修改、删除等都是原子操作②单个文档占用的存储空间不能超过16MB③MongoDB会尽量保持文档被插入时键值对的顺序(update时会改变键值对的顺序)④键值对是有序的 {"type":1,"status":2}不等于{"status":2,"type":1} 文档的大小写信息是敏感的 文档中不能出现重复的键 文档的值不仅可以是字符串,还可以是其他几种类型,甚至可以是整个嵌入的文档
以下是MongoDB中常用的几种数据类型
数据类型
String
Integer
Boolean
Double
Min/Max keys将一个值与BSON元素的最低值和最高值相对比
Array用于将数组或列表或多个值存储为一个键
Timestamp时间戳。记录文档修改或添加的具体时间
Object ID
Null用于创建空值
Symbol符号。该数据类型基本等同于字符串类型,但不同的是,它一般采用特殊符号类型的语言
Date日期时间。用UNIX时间格式来存储当前日期或时间
Object用于内嵌文档
Binary Data二进制数据
Code代码类型。用于在文档中存储JavaScript代码
Regular expression正则表达式类型
关于文档键的命名需要注意以下几点:①_id事故系统保留的关键字,它是默认的主键,该值在集合中必须唯一,且不可更改。②键名不能包含\0或空字符,这个字符用于表示键的结尾③不能以$开头④不能包含.(点号)
MongoDB集合集合就是一组文档,类似于关系数据库中的表。集合是无模式的,集合中的文档可以是各式各样的。它们的键值可以不同,值的类型也可以不同,但是它们可以存放在同一个集合中,也就是不同模式的文档都可以放在同一个集合中。但是如果把各种模式的文档放在同一个集合中,对于开发者来说无疑是灾难的,集合难以管理,对集合的查询、索引等操作效率都不高,在获取到查询结果后还需过滤掉各种不同类型的文档。所以在实际的使用中,往往将文档分类放在不同的集合中。这种对文档进行划分来分别存储的模式并不是MongoDB的强制要求,用户可以灵活选择。可以使用“.”按照命名空间将集合划分为子集合。虽然子集合没有任何特殊的地方,但是使用子集合组织数据结构更清晰。关于集合的命名需要注意以下几点:
①不能使空字符串②不能含有\0字符或空字符,这个字符用于表示集合的结尾③不能以"system."开头,这是为系统集合保留的前缀④用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统和生成的集合中包含该字符。除非你要访问这种系统穿件的集合,否则千万不要在名字里出现$
元数据数据库的信息是存储在集合中的。它们使用了系统的命名空间:dbname.system.*在MongoDB数据库中名字空间<dbname>.system.*是包含多种系统信息的特殊集合(Collection)
集合命名空间描述
dbname.system.namespaces列出所有名字空间。
dbname.system.indexes列出所有索引。
dbname.system.profile包含数据库概要(profile)信息。
dbname.system.users列出所有可访问数据库的用户。
dbname.local.sources包含复制对端(slave)的服务器信息和状态。
MongoDB数据库MongoDB中多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载多个数据库。它们之间可以看做相互独立,每个数据库都有独立的权限控制。在磁盘上,不同的数据库存放在不同的文件中。MongoDB中存在以下系统数据库:①Admin:权限数据库,如果创建用户的时候将该用户添加到admin数据库中,那么该用户就自动继承了所有数据库的权限。②Local:这个数据库永远不会被复制,可以用来存储本地单台服务器的任意集合。③Config:当MongoDB使用分片模式时,config数据库在内部使用,用于保存分片的信息

MongoDB文档的嵌入和引用对于关系型数据库,不同类型的信息需存入不同的表中。查询某些关联的信息时,需要检索多个表。但是对于mongoDB或者其他非关系型数据库来说,可以将关联的信息嵌入在单一的文档中。每个MongoDB文档都由BSON文档组成,有类似JSON格式一样的数据类型,其中String、Int、Float称为基本类型(或常量),而Hash和Array称之为复合类型。所谓的嵌套,就是说文档中,利用复合类型,包裹一个多或多个其他类型的值,这些值称之为子文档。文档嵌套的数量和深度没有限制,但MongoDB目前版本限制一个文档最大为16MB。采用这种方法维持了数据逻辑上的完整性,可以将一整项数据作为一个整体来操纵。对比在关系型的数据库中,为了设计出符合规范的表,我们常常要将多个数据项才分为几个表,然后通过外键来获取数据。这样做的后果是,当我们只看一个单独的表的数据时,通常只能看到一部分数据,而其他的都是外键id,影响了可读性和逻辑的完整性。检索时,只需要数据从一个文档加载到内存中,不必加载多个文档,提高了检索效率。
mongodb是介于关系型与非关系型数据库之间的,mongodb的join查询可以通过引用来实现。mongodb的引用是通过额外的执行一次查询来解决的。mongodb提供了两种方式来实现:手动引用和使用DBRef标准①手动引用手动引用就是在文档中插入要引用文档的id,检索时,通过_id进行一次额外的检索就可以获取所需的信息了②DBRefDBRef提供了一个更正式的规范引用文档之间的数据在DBRef中,数据库引用以标准的JSON/ BSON嵌入对象存储的。语法:
{ $ref : <collectionname>, $id : <id value>[, $db : <database name>] }
<collectionname>代表引用的集合的名称。<id value>所引用的文档的_id值。$ db是可选的,引用的文档所在的数据库的名称。
参考:http://www.runoob.com/mongodb/mongodb-tutorial.htmlhttp://www.ttlsa.com/nosql/mongodb/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: