640?wx_fmt=gif

在上一篇 《MongoDB 实战教程:数据库与集合的 CRUD 操作篇》 中,我们学习了MongoDB 与 NoSQL 的关系、 MongoDB 的安装、数据类型、MongoShell、创建数据库、显式创建集合和隐式创建集合,还学习了如何更改集合名称以及删除数据库和集合的方法,并对每种操作都进行了实例演示。

在本篇 chat 中我们将学习流式聚合操作,并深入了解语句的执行效率。然后深入学习能够提高数据服务可用性的复制集。接着了解 MongoDB 的水平扩展能力,学习 MongoDB 数据的备份与还原方法,并为数据服务开启访问控制。


640?wx_fmt=png

基础篇 一 文档的 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()` 示例如下:

640?wx_fmt=png

自动命令执行后会返回一个结果文档,文档输出如下:

640?wx_fmt=png

这说明文档插入成功。其中,`acknowledged` 代表本次操作的操作状态,状态值包括 `true` 和 `false`。`insertedId` 即该文档的 `_id`。

提示:示例中的省略号是 MongoShell 的换行标识符。换行标识符对命令输入和执行并没有影响,所以本文也不会注重风格的统一,即示例中有时会带有换行符,有时则不带有换行符。

插入多个文档

`db.collection.insertMany()` 示例如下:

640?wx_fmt=png

由于本次插入了 2 个文档,所以返回的结果文档会显示两个 `_id`。返回文档内容如下:

640?wx_fmt=png

`db.collection.insert()` 示例如下:

640?wx_fmt=png

示例演示的是单个文档的插入,实际上插入多个文档也是没问题的。`db.collection.insert()` 插入单个文档时返回的是一个带有操作状态的 `WriteResult` 对象:`WriteResult({ "nInserted" : 1 })` 。其中,`nInserted` 表明了插入文档的总数。但如果插入操作遇到错误,那么 `WriteResult` 对象将包含错误提示信息。

`db.collection.insert()` 插入多个文档的示例如下:

640?wx_fmt=png

可以看到,`db.collection.insert()`  插入多个文档和插入单个文档得到的返回结果是不同的。

Read Operations

MongoDB 提供了 `db.collection.find()` 方法从集合中读取文档。在开始练习之前,需要准备用于练习的基础数据。在 MongoShell 中执行以下文档插入操作:

640?wx_fmt=png

640?wx_fmt=png

查询文档

将一个空位当作为查询过滤器参数传递给 `db.collection.find()` 方法就可以得到所有文档,对应示例如下:

640?wx_fmt=png

或者什么都不传,直接使用 `find()`,对应示例如下:

640?wx_fmt=png

这等效于 SQL 中的 `SELECT * FROM inven`。

更多关于元素查询操作符的知识可查阅官方文档 Element Query Operators。

限于篇幅

欢迎扫描下方二维码继续阅读

640?wx_fmt=png

这是写给 0 基础同学的 MongoDB 快速入门文章。内容从文档 CRUD 到流式聚合操作;从执行计划、索引、数据模型到复制集;从分片、访问控制到数据备份与还原。6 篇近 10 万字的内容覆盖了 MongoDB 的大部分知识点,完全满足日常开发的要求。

在本场 Chat 中,你将收获:

  • 文档的 CRUD 操作和 Cursor 对象

  • 掌握流式聚合操作

  • 了解 MongoDB 的查询效率和优化

  • 如何提高 MongoDB 的可用性

  • 如何应对数据服务故障

  • 理解 MongoDB 的访问控制

  • 学会用数据模型降低数据冗余,提高效率

  • 掌握 mongodump 数据备份与还原方法

适合人群:

  • 对 MongoDB 感兴趣的 0 基础爱好者/开发者

  • 有一定基础,想要全面了解 MongoDB 的开发者

如果大家还有其他想问提想跟作者交流的,可以加微信「xiangcode」

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐