MongoDB常用概念解析

 
前面我们介绍了在不同的系统下安装 MongoDB,在具体学习 MongoDB 的操作之前,我们先来介绍一些 MongoDB 中的基本概念。

数据库

数据库是用于存储数据的物理容器,每个数据库在文件系统中都有属于自己的文件集。一台 MongoDB 服务器中可以创建多个数据库,并且每个数据库都是独立的,都有属于自己的集合和权限,而且不同数据库中的数据会放置在不同的文件中。

MongoDB 的默认数据库为“test”,该数据库存储在 data 目录中,您可以使用 show dbs 命令来查看所有的数据库列表,如下所示:

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

注意:在使用show dbs 命令时,若数据库中没有存储任何数据,则不会在列表中显示出来,也就是说只有非空数据库才能通过 show dbs 命令查看。

集合

集合就是一组 MongoDB 文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合存在于数据库中,且没有固定的结构,您可以向集合中插入不同格式或类型的数据。

文档

文档是 MongoDB 中数据的基本单位,由 BSON 格式(一种计算机数据交换格式,类似于 JSON)的键/值对组成,类似于关系型数据库中的一行行数据,但要相对复杂一些。

文档具有动态模式,所谓动态模式就是同一集合中的文档不需要具有相同的字段,即使是相同的字段也可以是不同的类型,这与关系型数据库有很大的区别,也是 MongoDB 最突出的特点之一。

下表列举了关系型数据库与 MongoDB 中的一些差异:

关系型数据库 MongoDB 解释说明
database database 数据库
table collection 数据表/集合
row document 数据行/文档
column field 字段/域
index index 索引
table joins   表连接,MongoDB 中不支持
primary key primary key 主键,MongoDB 会自动将 _id 字段设置为主键

下面的示例中展示了一个简单的文档结构:

{
    _id: ObjectId(601e288aaa203cc89f2d31a7),
    title: 'MongoDB Concept',
    description: 'MongoDB is no sql database',
    by: '编程帮',
    url: 'http://www.biancheng.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100,
    comments: [
       {
          user:'user1',
          message: 'My first comment',
          dateCreated: new Date(2011,1,20,2,15),
          like: 0
       },
       {
          user:'user2',
          message: 'My second comments',
          dateCreated: new Date(2011,1,25,7,45),
          like: 5
       }
    ]
}

上面示例中 _id 是一个 12 字节的十六进制数字,可确保每个文档的唯一性。您可以在插入文档时提供 _id 的具体值,但如果您不提供,那么 MongoDB 将为每个文档提供一个唯一的值。自动生成的 _id 中前 4 个字节是当前的时间戳,之后的 3 个字节是机器 id,再之后 2 个字节是 MongoDB 服务器的进程 id,剩下的 3 个字节是简单的随机数。