你的第一个 MongoDB 实验

MongoDBBeginner
立即练习

介绍

欢迎来到 LabEx!这是你的第一个 MongoDB 实验。如果你之前从未用过数据库,也请不用担心——我们会一步步指导你。

首先,让我们了解一下 MongoDB 是什么:MongoDB 是一个数据库系统,它以灵活的文档格式存储数据。与传统的电子表格不同,MongoDB 允许你以更自然的方式组织数据,这类似于你在电脑上将文件组织到文件夹中的方式。

在本实验中,你将学习如何:

  1. 启动 MongoDB shell 并了解它的作用
  2. 创建你的第一个数据库和集合 (collection)
  3. 在 MongoDB 中添加和查看数据
  4. 统计和删除数据

这些技能将为你 MongoDB 之旅打下基础。让我们开始吧!

点击下方 Continue 按钮开始实验。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 69%。获得了学习者 99% 的好评率。

启动 MongoDB Shell

在启动 MongoDB 之前,我们需要先在你的 LabEx 虚拟机中打开一个终端。你有两种方法可以做到:

  1. 终端界面 (Terminal Interface):我们推荐使用终端界面,因为它速度快且易于使用。这是 MongoDB 相关实验的默认界面。

    在终端界面中打开终端
  2. 桌面界面 (Desktop Interface):如果你更喜欢传统的终端体验,可以使用桌面界面。查看桌面左侧,然后点击标有 Xfce Terminal 的图标。

    在桌面界面中打开终端

这两种方法效果一样好——它们只是访问同一实验环境的不同方式。选择你喜欢的方式即可!

现在,让我们启动 MongoDB shell,它就像我们数据库的控制面板。你可以将 shell 理解为直接与 MongoDB 对话的方式——你输入命令,MongoDB 会做出响应。

要启动 MongoDB Shell,请在你的终端中输入以下命令并按 Enter 键:

mongosh

你将看到一个连接消息,表明你已成功连接到本地 MongoDB 实例。输出将类似于:

Current Mongosh Log ID: 65a7f3e5f1a1234567890abc
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+x.y.z
Using MongoDB:          X.X.X
Using Mongosh:          X.X.X

For mongosh info, see: https://docs.mongodb.com/mongodb-shell/

test>

test> 提示符表示你现在已进入 mongosh shell,并已连接到默认的 test 数据库。

让我们列出服务器上所有现有的数据库。在 mongosh shell 中输入以下命令:

show dbs

你将看到一个列表,其中包含 MongoDB 用于内部目的的默认数据库:

admin     40.00 KiB
config   112.00 KiB
local     40.00 KiB

在下一步中,你将创建自己的数据库。

创建数据库并插入文档

在 MongoDB 中,你无需显式创建数据库。当你首次向数据库存储数据时,它会自动创建。要切换到新数据库,请使用 use 命令。

让我们切换到一个名为 mylab_database 的数据库。在 mongosh shell 中,输入:

use mylab_database

Shell 会回复 switched to db mylab_database。即使数据库尚未创建,你现在也已在它的上下文中进行操作。

MongoDB 中的数据存储在集合 (collections) 中,集合是文档 (documents) 的分组。文档是一组键值对。让我们通过插入第一个文档来创建一个 users 集合。

使用 insertOne() 方法向 users 集合添加单个文档:

db.users.insertOne({ name: "JohnDoe", age: 30, city: "NewYork" })

让我们分解一下这个命令:

  • db: 代表当前数据库 (mylab_database)。
  • users: 集合的名称。它将自动创建。
  • insertOne(): 插入一个文档的方法。
  • {...}: 文档本身,包含 nameagecity 等字段。

MongoDB 会确认插入操作,并返回它为该文档生成的唯一 _id

{
  acknowledged: true,
  insertedId: ObjectId("...")
}

ObjectId 是一个唯一标识符,会自动分配给每个文档。

现在,让我们验证文档是否已添加。使用 find() 方法查看 users 集合中的所有文档:

db.users.find()

输出将显示你刚刚插入的文档:

[
  {
    _id: ObjectId("..."),
    name: 'JohnDoe',
    age: 30,
    city: 'NewYork'
  }
]

插入多个文档

通常,你需要一次性添加多个文档。insertMany() 方法非常适合此目的。它接受一个文档数组作为其参数。

让我们创建一个新的 books 集合,并用一个命令向其中添加三本书。

db.books.insertMany([
    { title: "MongoDBBasics", author: "JaneSmith", year: 2023 },
    { title: "PythonProgramming", author: "JohnDoe", year: 2022 },
    { title: "DataScienceHandbook", author: "AliceJohnson", year: 2021 }
])

注意方括号 [ ],它们定义了一个数组。数组中的每个对象 {...} 都是一个单独的文档。

MongoDB 会确认操作,并返回所有已插入文档的 _id 值:

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("..."),
    '1': ObjectId("..."),
    '2': ObjectId("...")
  }
}

要查看新创建的 books 集合中的所有文档,请再次使用 find() 方法:

db.books.find()

输出将列出你刚刚添加的所有三本书籍文档。

查询和计数文档

现在你有了数据,让我们学习如何检索和计数它。

要计算集合中文档的总数,请使用 countDocuments() 方法。让我们计算 books 集合中的书籍数量:

db.books.countDocuments()

该命令将返回总数:

3

要查找特定文档,你需要将查询过滤器 (query filter) 传递给 find() 方法。查询过滤器是一个指定搜索条件的文档。

例如,要查找所有由 "JohnDoe" 编写的书籍,请使用以下查询:

db.books.find({ author: "JohnDoe" })

过滤器 { author: "JohnDoe" } 告诉 MongoDB 只返回 author 字段值为 "JohnDoe" 的文档。

你也可以基于数值进行查询。让我们查找所有在 2023 年出版的书籍:

db.books.find({ year: 2023 })

这将返回 "MongoDBBasics" 这本书。find() 方法是检索你所需精确数据的强大工具。

删除文档

最后,让我们学习如何从集合中删除文档。

要删除匹配特定条件的单个文档,请使用 deleteOne() 方法。让我们删除标题为 "MongoDBBasics" 的书籍:

db.books.deleteOne({ title: "MongoDBBasics" })

Shell 会确认已删除一个文档:

{ acknowledged: true, deletedCount: 1 }

要删除匹配条件的多个文档,请使用 deleteMany()。此方法支持查询操作符来创建更复杂的条件。例如,$lt 代表 "小于" (less than)。

让我们删除所有在 2022 年之前出版的书籍:

db.books.deleteMany({ year: { $lt: 2022 } })

此命令将删除 year 字段值小于 2022 的所有文档。在本例中,它将删除 "DataScienceHandbook"。

要查看剩余的书籍,请最后运行一次 find() 命令:

db.books.find()

集合中应该只剩下 "PythonProgramming" 这本书。

你现在已经练习了 MongoDB 中的基本 CRUD (Create, Read, Update, Delete) 操作。要退出 mongosh shell,请输入:

exit

总结

恭喜你完成了你的第一个 MongoDB 实验!你已成功学习并实践了在 MongoDB 数据库中管理数据的核心操作。

在此实验中,你学习了如何:

  • 启动 mongosh shell 以与 MongoDB 服务器进行交互。
  • 使用 use 命令切换到数据库。
  • 使用 insertOne()insertMany() 插入单个和多个文档。
  • 使用带或不带查询过滤器的 find() 来检索文档。
  • 使用 countDocuments() 来计数集合中的文档。
  • 使用 deleteOne()deleteMany() 来删除文档。

这些基本技能是使用 MongoDB 开发强大应用程序的基石。熟能生巧,请随时进一步尝试你学过的命令。