文档是 MongoDB 的核心概念,是数据的基本单元,非常类似于关系数据库中的行。在 MongoDB 中,文档表示为键值对的一个有序集。MongoDB 使用 Javascript shell,文档的表示一般使用 Javascript 里面的对象的样式来标记,如下:
- 1 {
- "title": "hello!"
- }
- 2 {
- "title": "hello!",
- "recommend": 5
- }
- 3 {
- "title": "hello!",
- "recommend": 5,
- "author": {
- "firstname": "paul",
- "lastname": "frank"
- }
- }
从上面的例子可以看到,文档的值有不同的数据类型,甚至可以是一个完整的内嵌文档(最后一个示例的 author 是有一个完整的文档表示的,文档里面定义了 firstname 和 lastname。当然还可以包含更多其他信息甚至于在内嵌文档中还可以有内嵌文档)。
文档区分大小写和数据类型,所以以下两组文档是不同的:
- 1 {
- "recommend": "5"
- }
- 2 {
- "recommend": 5
- }
- 3 4 {
- "Recommend": "5"
- }
- 5 {
- "recommend": "5"
- }
MongoDB 的文档不能有重复的键。下面的文档是非法的:
- 1 {
- "title": "hello!",
- "title": "Mongo"
- }
创建文档非常简单,通过插入语句就能向数据库中创建一个文档记录。
- 1 > db.blogs.insert({
- "title": "hello!"
- })
如果在执行这条语句之前,数据库和 blogs 集合并没有创建,会分别创建数据库和集合,同时插入文档。
- 1 > db.blogs.remove() // 删除集合中所有文档。
- 2 > db.blogs.remove({
- "title": "hello!"
- }) // 删除指定条件的文档,当前语句删除"title"为"hello!"的文档。
集合是一组文档的集,相当于关系型数据库中的数据表。
集合是动态模式的。什么意思呢?具体来说就是一个集合里面的文档可以是各式各样的。举例来说,下面的两种文档完全可以存储在同一个集合里面:
- 1 {
- "title": "hello!"
- }
- 2 {
- "recommend": 5
- }
可以看出,上面两个文档不仅值得类型不同,连键也完全不一样。这和关系型数据库中一个表中只能存放相同模型的数据结构显得很不一样。但是这也就产生了一个问题:既然一个集合中可以存放任意的文档,那么多个集合的存在还有什么必要性呢?这其实可以和关系型数据表可以对应起来理解,我们可以创建一张表容纳下上面提到的 title 和 recommend 列,但是总有一个列是 NULL 的。这还仅仅是两个列的情况,如果出现无数的列,那么这种情况就非常糟糕了。所以不难想出一个数据库中存在多个集合的原因应该至少有如下几点:
- 1 db.users.help()
当然还有很多命令在这里没有列出,但是可以通过 help() 命令轻松的查看能在集合上执行的命令。
多个文档构成集合,多个集合组成数据库。一个 MongoDB 实例可以承载多个数据库,每个数据库可以拥有 0 到多个集合。下图所示是我的机器上用到的数据库的本地文件:
MongoDB 权威指南第 2 版 PDF 完整带书签目录 下载见
更多 MongoDB 相关教程见以下内容:
编译安装 MongoDB 与 mongoDB 的 php 扩展
CentOS 6 使用 yum 安装 MongoDB 及服务器端配置
13.04 下安装 MongoDB2.4.3
MongoDB 入门必读 (概念与实战并重)
Ubunu 14.04 下 MongoDB 的安装指南
《MongoDB 权威指南》(MongoDB: The Definitive Guide) 英文文字版 [PDF]
Nagios 监控 MongoDB 分片集群服务实战
基于 CentOS 6.5 操作系统搭建 MongoDB 服务
MongoDB 的详细介绍:
MongoDB 的下载地址:
来源: