一、什么是mongoDB?

1、MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。

2、MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

3、MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

二、历史

1、2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。

2、2012年05月23日,MongoDB2.1 开发分支发布了! 该版本采用全新架构,包含诸多增强。

3、2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。

4、2013年04月23日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能增强以及bug修复。

5、2013年08月20日,MongoDB 2.4.6 发布,是目前最新的稳定版。

三、主要特点

1、MongoDB的提供了一个面向文档存储,基本的思路就是将原来“行”的概念换成更加灵活的“文档”模型。一条记录可以表示非常复杂的层次关系。

2、Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

3、非常容易扩展。面对数据量的不断上涨,通常有两种方案,一种是购买更好的硬件,别一种是分散数据,进行分布式的扩展,前者有着非常大的缺点,因为硬件通常是有物理极限的,当达到极限以后,处理能力就不可能再进行扩展了。所以建议的方式是使用集群进行扩展。MongoDB所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。

4、MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

5、丰富的功能。包括索引、存储JavaScript、聚合、固定集合、文件存储等。

6、方便的管理,除了启动数据库服务器之外,几乎没有什么必要的管理操作。管理集群只需要知道有新增加的节点,就会自动集成和配置新节点。

四、安装

brew install mongodb

五、数据库

1、一个mongodb中可以建立多个数据库。

2、MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

3、数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

1.不能是空字符串(””)。

2.不得含有’ ‘(空格)、.、$、/、\和\0 (空宇符)。

3.应全部小写。

4.最多64字节。

4、有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

1.admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

2.local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合 。

3.config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

六、文档

文档是mongodb中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。

多个键及其关联的值有序的放置在一起就是文档。MongoDB使用了BSON这种结构来存储数据和网络数据交换。

BSON数据可以理解为在JSON的基础上添加了一些json中没有的数据类型。

如果我们会JSON,那么BSON我们就已经掌握了一半了,至于新添加的数据类型后面我会介绍。

文档例子如下:

{name:”张三”,age:20,hobby:[“看书”,”旅游”,”唱歌”]}

需要注意的是:

1. 文档中的键/值对是有序的。

2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌人的文档)。

3. MongoDB区分类型和大小写。

4. MongoDB的文档不能有重复的键。

5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

1 键不能含有\0 (空字符)。这个字符用来表示键的结尾。

2 .和$有特别的意义,只有在特定环境下才能使用。

3 以下划线”_”开头的键是保留的(不是严格要求的)。

七、集合

集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。

在mongodb中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:

{“name”:”tangcaiye”}

{“Name”:”tangcaiye”,”sex”:”nan”}

注:当第一个文档插入时,集合就会被创建。

合法的集合名

1. 集合名不能是空字符串””。

2. 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。

3. 集合名不能以”system.”开头,这是为系统集合保留的前缀。

4. 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

mongoDB的了解的更多相关文章

  1. 【翻译】MongoDB指南/聚合——聚合管道

    [原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...

  2. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  3. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  4. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  5. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  6. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  8. MongoDB系列(一):简介及安装

    什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...

  9. [原]分享一下我和MongoDB与Redis那些事

    缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...

  10. 用MongoDB分析合肥餐饮业

    看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...

随机推荐

  1. LCS 的 NlogN作法

    这个算法其实是因为LIS有NlogN的作法,把LCS转化为了LIS来做. 对于序列A{},B{},我们可以记录下来B中的每个元素在A中出现的位置,按顺序保存在一个新序列当中, 如果有多个位置按倒序写, ...

  2. ycsb两个阶段说明

     ycsb有几个目录需要注意下: bin: - 目录下有个可执行的ycsb文件,是个python脚本,是用户操作的命令行接口.ycsb主逻辑是:解析命令行.设置java环境,加载java-libs,封 ...

  3. 【scala】元组

    元组跟list类似,元组也是不可边的,但是元组可以容纳不同类型的元素. 元组用起来很简单,要实例化一个新的元组,只需要将对象放在圆括号当中,用逗号隔开即可. val pair = (99,“Luftb ...

  4. 【poj2553】The Bottom of a Graph(强连通分量缩点)

    题目链接:http://poj.org/problem?id=2553 [题意] 给n个点m条边构成一幅图,求出所有的sink点并按顺序输出.sink点是指该点能到达的点反过来又能回到该点. [思路] ...

  5. Struts06---通配符的使用

    01.创建对应的login.jsp页面 <%@ page language="java" import="java.util.*" pageEncodin ...

  6. C++友元类实现

    C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元.当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员. 请看 ...

  7. 当导用模块与包的import与from的问题(模块与包的调用)

    当在views.py里写impor models会不会报错呢? 1.Python里面的py文件都是每一行的代码. 2.Python解释器去找一个模块的时候,只去sys.path的路径里找 3.djan ...

  8. linux 下看所有用户 及所有组

    俺的centos vps上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表,google了一下,找到方便的放:一般情况下是 cat /etc/passwd 可以查看所有用 ...

  9. tensorflow中常用激活函数和损失函数

    激活函数 各激活函数曲线对比 常用激活函数: tf.sigmoid() tf.tanh() tf.nn.relu() tf.nn.softplus() tf.nn.softmax() tf.nn.dr ...

  10. TCP传输控制协议

    TCP 在TCP/IP协议模型中, 传输层协议有TCP和UDP, 这里主要介绍下可靠传输TCP协议, 目前是传输层协议首选. 特点 面向数据流(字节流形式) 虚电路连接 有缓冲传输(提供push机制 ...