说到MongoDB,必须先从NoSQL说起。NoSQL(NoSQL = Not Only SQL) ,意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009 年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL 数据库特点
优点:高并发读写、海量数据存储、高可扩展性及高可用性。
缺点:缺乏事务一致性、缺乏读写实时性及不支持复杂查询。
NoSQL数据库类型
1、key-value
Key指向Value的键值对,通常用hash table来实现。
产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB等。
2、列式数据库
以列簇式存储,将同一列数据存在一起。
产品:Cassandra、HBase、Riak等。
3、文档型数据库
Key-Value对应的键值对,Value为结构化数据。
产品:CouchDB、MongoDB等。
4、图结构数据库
以“图”为基本存储模型。
产品:Neo4J、InfoGrid、Infinite Graph等。
MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较 复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB数据架构
MongoDB
数据库命名规范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不得包含以下字符:(空格)、.、$、/、/、/0;
4.长度不得超过64字节;
5.保留字:admin、local、config等;
集合命名规范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不能包含/0、$;
4.不能以system.开头;
文档命名规范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不能包含/0、$;
4.不能以_开头;
MongoDB的数据类型
MongoDB底层使用Bson来维护数据,Bson是一种二进制下的类似于Json的数据格式。MongoDB中值得一说的有以下几个数据类型:基本数据类型、数组、文档嵌套及ObjectId。
MongoDB的基本数据类型
null | 空 |
bool | true、false |
数字 | 仅支持64位浮点数,其他类型的数字会自动转化为此格式 |
字符串 | 支持UTF-8字符集 |
日期 | 存储标准纪元开始的毫秒数,不含时区 |
regex | 符合JavaScript语法的正则表达式 |
code | 任何JavaScript代码 |
binary | 可存储任意字节数的字节数组,但在Shell中无法使用 |
数组 | 对象集合或列表在MongoDB可以被存储为数组 |
嵌套文档 | 一个文档可以包含另外一个文档 |
MongoDB的
MongoDB 中的数组既可以作为有序对象(如列表)来操作,也可以作为无序对象(如集合)来操作。 MongoDB可以以原子操作的形式来修改或删除数组中的元素。
例如:
{
// 这个不是数组
"Status" : 0,
// 这个是空数组
"Messages" : [],
// 包含3个元素的数组
"ResponseBody" : [
"h010t00101025",
"h010t00101039",
"h010t00101040“
]
}
MongoDB的文档嵌套
文档式存储的特色就是允许文档对象的嵌套,这能够使我们的实体数据在 MongoDB 的存在形式更加自然。
例如:
// 根文档
{
"Status" : 0,
// 嵌套文档
"ResponseBody" : {
"CityName" : "北京",
"Keyword" : "钓鱼台",
// 再套一个数组,数组的每个元素又是文档,NB吧!
"Landmarks" : [
{ “Name” : “北京钓鱼台国际旅行社” },
{ "Name" : "钓鱼台“ }
]
}
}
MongoDB的objectid
ObjectId是_id (_id 是 MongoDB 在每个文档中的默认唯一标识的名称) 的默认类型。
新闻热点
疑难解答