跳转至

简介

MongoDB是基于分布式文件存储的开源数据库,它具有高性能/可扩展/易部署/易使用/存储数据非常方便等特点。它在DB-Engine长期排名前五,也是最受欢迎的NoSQL数据库之一。

MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。

MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。

MongoDB Inc. 公司于2007年在纽约成立,产品于2008年开源。MongoDB于 2017年10月在纳斯达克上市,是26年来第一家上市的数据库公司,目前它的市值从刚上市时候的12亿美元涨到了248亿美元,并且在全球一百多个国家/地区拥有约25000个客户。

MongoDB提供数据库的社区版和企业版:

  • MongoDB社区版是MongoDB的开源和免费版本。

  • MongoDB企业版作为MongoDB高级企业版订阅的一部分提供,并包括对MongoDB部署的全面支持。MongoDB企业版还添加了以企业为中心的功能,例如LDAP和Kerberos支持,磁盘上的加密以及审计。

MongoDB还提供 Atlas(云中托管的MongoDB企业版服务选项),无需安装开销,并提供免费的入门套餐。

mongo基本概念

MongoDB 不是关系数据库,而是面向文档(document-oriented)的数据库。

面向文档的数据库使用更灵活的文档模型取代了的概念。通过嵌入文档和数组,面向文档的方式可以仅用一条记录来表示复杂的层次关系。

MongoDB 中也没有预定义模式(predefined schema):文档键值的类型和大小不是固定的。由于没有固定的模式,因此按需添加或删除字段变得更容易。

文档

文档是MongoDB的核心概念。文档就是键值对的有序集合。每种编程语言表示文档的方法不太一样,但大多数都有类似的数据结构。比如映射,哈希,字典等。

// 在 JavaScript 里,文档被表示为对象:
{
    "greeting" : "Hello, World!" , 
    "foo": 3
}

文档的键是字符串。它具有如下约束和限制:

  • 除了少数例外情况,键可以使用任意 UTF-8 字符( . 和 $ 有特殊含义)。键区分大小写。
  • 文档不能有重复的键。
  • 文档中的键值对是有序的。

集合

集合就是一组文档。如果将MongoDB中的一个文档比作关系数据库中的一行,那么集合就相当于一张表。

动态模式

集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的。集合可以放置任意文档。

为什么需要将不同的文档放到不同的集合中?

命名 集合使用名称进行标识。集合名称可以是满足下列条件的任意UTF-8字符。 集合名不能是空字符串。 集合名不能包含空字符

子集合 组织集合的一种惯例是使用 . 分割不同命名空间的子集合。例如,一个具有博客功能的应用可能包含两个集合。分别是 blog.posts 和 blog.authors 。这是为了使组织结构更清晰,这里的 blog 集合甚至可以不需要存在。

在 MongoDB 中,使用子集合来组织数据非常高效。值得推荐。

数据库 在 MongoDB 中,多个文档组成集合,多个集合可以组成数据库。一个 MongoDB 实例可以承载多个数据库。每个数据库有0个或多个集合。 每个数据库有独立的权限, 数据库通过名称来标识。这点与集合类似。数据库命名要求如下: 不能是空字符串。 基本上只能用 ASCII 中的字母和数字。 数据库名区分大小写。简单起见,数据库名应全部为小写。 数据库名最多为64字节。

数据库最终会变成文件系统中的文件。数据库名就是相应文件名。另外,有一些数据库名是保留的。可以直接访问这些有特殊语义的数据库:

admin 从身份验证角度讲,这是 ”root“ 数据库。如果将一个用户添加到admin数据库中,这个用户自动获得所有数据库的权限。 local config 把数据库名称添加到集合名前,得到集合的完全限定名。即”命名空间“ , 例如要使用 cms 数据库中的 blog.posts 集合。这个集合的命名空间就是 cms.blog.posts 命名空间长度不得超过121字节,且在实际应用中应小于100字节。