在上一篇 《MongoDB 实战教程:数据库与集合的 CRUD 操作篇》 中,我们学习了MongoDB 与 NoSQL 的关系、 MongoDB 的安装、数据类型、MongoShell、创建数据库、显式创建集合和隐式创建集合,还学习了如何更改集合名称以及删除数据库和集合的方法,并对每种操作都进行了实例演示。
在本篇 chat 中我们将学习流式聚合操作,并深入了解语句的执行效率。然后深入学习能够提高数据服务可用性的复制集。接着了解 MongoDB 的水平扩展能力,学习 MongoDB 数据的备份与还原方法,并为数据服务开启访问控制。
基础篇 一 文档的 CRUD 操作
CRUD 操作指的是对文档进行 `create`,`read`,`update` and `delete` 操作,即增删改查。文档 CRUD 操作的内容将分为 `Create Operations`, `Read Operations`, `Update Operations`, `Delete Operations` 和 `Cursor` 等 5 个部分进行介绍。
Create Operations
创建操作或者插入操作会向集合添加新的文档。之前有提到过,如果插入时集合不存在,插入操作会创建对应的集合。MongoDB 提供了 3 个插入文档的方法:
`db.collection.insert()`
`db.collection.insertOne()`
`db.collection.insertMany()`
插入单个文档
其中,`db.collection.insertOne()` 用于向集合插入单个文档。而 `db.collection.insertMany()` 和 `db.collection.insert()` 可以向集合插入多个文档。`db.collection.insertOne()` 示例如下:
自动命令执行后会返回一个结果文档,文档输出如下:
这说明文档插入成功。其中,`acknowledged` 代表本次操作的操作状态,状态值包括 `true` 和 `false`。`insertedId` 即该文档的 `_id`。
提示:示例中的省略号是 MongoShell 的换行标识符。换行标识符对命令输入和执行并没有影响,所以本文也不会注重风格的统一,即示例中有时会带有换行符,有时则不带有换行符。
插入多个文档
`db.collection.insertMany()` 示例如下:
由于本次插入了 2 个文档,所以返回的结果文档会显示两个 `_id`。返回文档内容如下:
`db.collection.insert()` 示例如下:
示例演示的是单个文档的插入,实际上插入多个文档也是没问题的。`db.collection.insert()` 插入单个文档时返回的是一个带有操作状态的 `WriteResult` 对象:`WriteResult({ "nInserted" : 1 })` 。其中,`nInserted` 表明了插入文档的总数。但如果插入操作遇到错误,那么 `WriteResult` 对象将包含错误提示信息。
`db.collection.insert()` 插入多个文档的示例如下:
可以看到,`db.collection.insert()` 插入多个文档和插入单个文档得到的返回结果是不同的。
Read Operations
MongoDB 提供了 `db.collection.find()` 方法从集合中读取文档。在开始练习之前,需要准备用于练习的基础数据。在 MongoShell 中执行以下文档插入操作:
查询文档
将一个空位当作为查询过滤器参数传递给 `db.collection.find()` 方法就可以得到所有文档,对应示例如下:
或者什么都不传,直接使用 `find()`,对应示例如下:
这等效于 SQL 中的 `SELECT * FROM inven`。
更多关于元素查询操作符的知识可查阅官方文档 Element Query Operators。
限于篇幅
欢迎扫描下方二维码继续阅读
▼
这是写给 0 基础同学的 MongoDB 快速入门文章。内容从文档 CRUD 到流式聚合操作;从执行计划、索引、数据模型到复制集;从分片、访问控制到数据备份与还原。6 篇近 10 万字的内容覆盖了 MongoDB 的大部分知识点,完全满足日常开发的要求。
在本场 Chat 中,你将收获:
文档的 CRUD 操作和 Cursor 对象
掌握流式聚合操作
了解 MongoDB 的查询效率和优化
如何提高 MongoDB 的可用性
如何应对数据服务故障
理解 MongoDB 的访问控制
学会用数据模型降低数据冗余,提高效率
掌握 mongodump 数据备份与还原方法
适合人群:
对 MongoDB 感兴趣的 0 基础爱好者/开发者
有一定基础,想要全面了解 MongoDB 的开发者
如果大家还有其他想问提想跟作者交流的,可以加微信「xiangcode」