本篇我们介绍 MongoDB 客户端工具 mongo 的使用。

mongo shell

mongo shell 是一个用于连接 MongoDB 的交互式 JavaScript 接口。mongo shell 可以用于操作 MongoDB 中的数据,也可以执行一些管理任务。

mongo shell 类似于 MySQL 数据库客户端 mysql,PostgreSQL 客户端 psql,或者 Oracle 数据库中的 SQL*Plus 工具。

注意,MongoDB v5.0 开始默认弃用了随着 MongoDB 一起安装的 mongo shell,推荐使用新的 mongsh。

在使用 mongo shell 之前,我们需要下载并安装该工具。

安装完成之后,在命令行中输入以下命令:

mongosh

mongo shell 会自动连接到本地(localhosr)默认端口(27017)上的 MongoDB 服务。

mongo shell 即可以作为一个功能完备的 JavaScript 解释器,也可以作为一个 MongoDB 客户端工具。

JavaScript 解释器

mongo shell 是一个功能完备的 JavaScript 解释器,所以我们可以用它执行 JavaScript 代码。例如:

> Math.max(10,20,30);
30

mongo shell 允许输入跨行命令,当我们输入回车时它会检测 JavaScript 语句是否完整。如果语句不完整,我们可以在下一行继续输入:

> function add(a, b) {
... return a + b;
... }
> add(10,20);
30

输入 console.clear() 命令可以清空屏幕:

console.clear()

MongoDB 客户端

mongo shell 是一个 MongoDB 客户端。默认情况下,它会连接本地 MongoDB 服务中的 test 数据库,并且将数据库连接设置为全局变量 db。

db 变量可以用于查看当前数据库:


> db
test

除了 JavaScript 语法之外,mongosh 还提供了很多方便我们与 MongoDB 数据库服务器交换的命令。例如,shows dbs 命令可以列出服务中的全部数据库:

test> show dbs
admin        41 kB
config     73.7 kB
local      81.9 kB

以上输出结果显示了 3 个数据库。

如果想要切换当前数据库,可以使用 use 命令。例如,以下命令可以将当前数据库切换为 bookdb 数据库:

test> use bookdb
switched to db bookdb

注意,我们可以切换到一个不存在的数据库。此时,当我们第一次保存数据时,MongoDB 会自动创建这个数据库。

执行以上命令之后,变量 db 的值为 bookdb:

> db
bookdb

此时,我们可以通过变量 db 访问数据库 bookdb 中的集合 books:

> db.books
bookdb.books

基本的 CRUD 操作

下面我们演示一下如何创建(Create)、读取(Read)、更新(Update)以及删除(Delete)文档。这些操作也被称为 CRUD。

本文只涉及简单的 CRUD 操作,我们将会在后续教程中学习详细的 CRUD 操作。

创建文档

如果想要在集合中创建一个新的文档,可以使用 insertOne() 方法。

以下命令为集合 books 增加了一个新的文档(一本新书):

db.books.insertOne({
   title: "SQL编程思想",
   published_year: 2021
})

输出结果如下:

{
        "acknowledged" : true,
        "insertedId" : ObjectId("62bb0962874071c64b1f9b7b")
}

当我们输入回车时,mongo shell 会将命令发送到 MongoDB 服务器。如果命令有效,MongoDB 会插入文档并返回结果。

以上示例中,返回对象包含两个键:acknowledged 和 insertedId。insertedId 的值就是文档的 _id 字段。

如果我们增加文档时没有指定 _id 字段,MongoDB 会自动为文档指定一个唯一的 ObjectId 作为 _id 字段的值。

MongoDB 使用 _id 字段唯一标识集合中的文档。

查找文档

如果想要查找集合中的文档,可以使用 findOne() 方法。例如:

db.books.findOne()

输出结果如下;

{
  _id: ObjectId("62bb0962874071c64b1f9b7b"),
  title: 'SQL编程思想',
  published_year: 2021
}

pretty() 方法可以将输出结果进行格式化显示,例如:

db.books.find().pretty()

{
        "_id" : ObjectId("62bb0962874071c64b1f9b7b"),
        "title" : "SQL编程思想",
        "published_year" : 2021
}

更新文档

如果想要更新某个文档中的内容,可以使用 updateOne() 方法。该方法至少需要提供两个参数:

  • 第一个参数指定了需要更新的文档。
  • 第二个参数指定了更新操作的内容。

以下示例更新了标题为“SQL编程思想”的文档的 published_year 字段:

db.books.updateOne(
	{ title: "SQL编程思想"}, 
	{ $set: { published_year: 2022 }}
)

其中,第一个参数表示更新标题为“SQL编程思想”的第一个文档。第二个参数使用 $set 操作符更新字段 published_year 的值。返回结果如下:

{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

删除文档

如果想要删除集合中的某个文档,可以使用 deleteOne() 方法。该方法包含一个参数,用于指定要删除的文档。

以下示例使用 deleteOne() 方法删除集合 books 中标题为“SQL编程思想”的第一个文档:

db.books.deleteOne({title: "SQL编程思想"});

输出结果如下:

{
    "acknowledged": true,
    "deletedCount": 1
}

返回结果中的 deletedCount 表示成功删除了一个文档。

如果想要查看当前数据库中的所有集合,可以使用 show collections 命令:

show collections

books

数据库 bookdb 中目前只包含一个集合。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐