MongoDB权威指南之入门指南

122 阅读5分钟

本章介绍 MongoDB 的一些基本概念。

文档是 MongoDB 中的基本数据单元,可以粗略地认为其相当于关系数据库管理系统中的行(但表达力要强得多)。 集合可以被看作具有动态模式的表。 一个 MongoDB 实例可以拥有多个独立的数据库,每个数据库都拥有自己的集合。 每个文档都有一个特殊的键 _id,其在所属的集合中是唯一的。

MongoDB 自带了一个简单但功能强大的工具:mongo shell。mongo shell 对管理 MongoDB 实例和使用 MongoDB 的查询语言操作数据提供了内置的支持。它也是一个功能齐全的 JavaScript 解释器,用户可以根据需求创建或加载自己的脚本。

文档

文档是 MongoDB 的核心概念:它是一组有序键值的集合。文档的表示形式因编程语言而异。 例如,在JS中,文档表示为对象:

{"greeting" : "Hello, world!", "views" : 3}

文档中的键是字符串类型。除了少数例外的情况,可以使用任意 UTF-8 字符作为键。

键和值定义的注意事项 MongoDB会区分值的类型(如数字和字符串等)、键的大小写、键不能重复。

集合

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

动态模式

集合具有动态模式 的特性。这意味着集合中的键不固定,两个键完全不同的文档也可以存储在同一个集合中。

将相同类型文档放在同一集合中的意义

  • 易于开发人员抽象查找
  • 获取集合列表比提取集合中的文档类型列表要快得多
  • 创建索引(尤其是在创建唯一索引)时,我们会采用一些文档结构。这些索引是按照每个集合来定义的。
  • 创建模式并且将相关类型的文档放在一起是非常合理的。

命名

集合由其名称进行标识。 集合名称可以是任意 UTF-8 字符串,但有以下限制。

  • 集合名称不能是空字符串("")。
  • 集合名称不能含有 \0(空字符),因为这个字符用于表示一个集合名称的结束。
  • 集合名称不能以 system. 开头,该前缀是为内部集合保留的。
  • 用户创建的集合名称中不应包含保留字符 $。
  • 子集合使用 . 字符分隔不同命名空间的子集合是一种组织集合的惯例。
    • 例如,有一个具有博客功能的应用程序,可能包含名为 blog.posts 和名为 blog.authors 的集合。这只是一种组织管理的方式,blog 集合(它甚至不必存在)与其“子集合”之间没有任何关系。尽管子集合没有任何特殊属性,但它们很有用,许多 MongoDB 工具整合了子集合。
    • GridFS 是一种用于存储大型文件的协议,它使用子集合将文件元数据与内容块分开存储。大多数驱动程序为访问指定集合的子集合提供了一些语法糖。例如,在数据库 shell 中,使用 db.blog 可以访问 blog 集合,使用 db.blog.posts 可以访问 blog.posts 集合。在 MongoDB 中,使用子集合来组织数据在很多场景中是一个好方法。

数据库

MongoDB 使用集合对文档进行分组,使用数据库对集合进行分组。一个MongoDB 实例可以承载多个数据库,每个数据库有零个或多个集合。

荐的做法是将单个应用程序的所有数据都存储在同一个数据库中。在同一个MongoDB 服务器上存储多个应用程序或用户的数据时,使用单独的数据库会非常有用。

数据库名称可以是任意 UTF-8 字符串,数据库名称只能用ASCII字母和数字。

启动MongoDB

Windows系统执行 mongod.exe 启动MongoDB

启动时,服务器端会打印版本和系统信息,然后开始等待连接。

默认情况下,MongoDB 会监听 27017 端口上的socket连接。

如果端口不可用,那么服务器将无法启动——最常见的原因是有另一个 MongoDB 实例正在运行。

MongoDB Shell介绍

MongoDB 自带 JavaScript shell,允许使用命令行与 MongoDB 实例进行交互。

运行shell

shell 在启动时会自动尝试连接到本地机器上运行的 MongoDB 服务器端,因此在启动 shell 之前,请先确保 mongod 已启动。

MongoDB客户端

启动时,shell 会连接到 MongoDB 服务器端的test 数据库,并将此数据库连接赋值给全局变量 db。此变量是通过 shell 访问MongoDB 服务器端的主要入口点。

shell中的基本操作

insertOne 函数可以将一个文档添加到集合中。

deleteOne 和 deletemany 方法会从数据库中永久删除文档。

find 和 findOne 方法可用于查询集合中的文档。如果只想查看一个文档,可以使用 findOne

find 和 findOne 方法可用于查询集合中的文档。如果只想查看一个文档,可以使用 findOne。

数据类型

基本数据类型

null、布尔类型、数值类型、字符串类型、日期类型、正则表达式、数组类型、内嵌文档、Object ID、二进制数据、代码

使用MongoDB shell

不太实用,略过了