简介
MongoDB 因其灵活性、可扩展性、性能和生态系统而受到开发人员的青睐,这些都是构建和驱动现代应用程序的关键能力。通过几个配置步骤,你就可以在你的 Ubuntu 22.04 LTS 机器上安装 MongoDB,这是 Ubuntu Linux 发行版的最新长期支持版本。
本教程将逐步介绍整个过程,从如何在 Ubuntu 22.04 上安装 MongoDB 到如何使用它,其中包含必要的命令和代码示例。我们将重点介绍在代号为 Jammy JellyFish 的 Ubuntu 22.04 上安装 MongoDB Community Edition。
什么是 MongoDB?
MongoDB 是一个开源、跨平台的数据库,它已被广泛用于开发高性能、可扩展的应用程序。它与传统的 SQL 数据库在建模和组织数据的方式上有所不同。
MongoDB 不是基于严格的表格关系,而是基于灵活的、面向文档的数据模型构建的。每个实体都存储为一个 BSON 文档——一种类似 JSON 的字段-值对的二进制表示。文档包含具有数组和子文档的层次结构,反映了复杂的现实世界数据。
声明式的文档模型、动态模式和原生扩展功能使 MongoDB 在数据限制较少的敏捷开发中很受欢迎。
MongoDB 的用途是什么?
MongoDB 用于构建任何应用程序,例如 Web 应用程序或移动应用程序,这些应用程序涉及大量快速变化的、半结构化或非结构化数据。由于其灵活的数据结构,MongoDB 对于寻求快速构建可扩展应用程序,同时管理大量数据处理需求的开发人员来说是一个合理的选择。
当前稳定版本是 MongoDB 7.0。这是一个于 2013 年 8 月发布的主要版本,受到本地部署和多云数据库服务 MongoDB Atlas 的支持。
MongoDB 7.0 包含以下主要改进,以增强开发人员的体验。
- 通过可查询加密增强安全性,有助于从客户端加密数据,并对随机数据运行富有表现力的查询。
- 性能增强,包括复合通配符索引,以及改进的元数据、集群、数据库和集合级别的分片诊断。此外,使用时间序列数据和大型数据集已得到简化。
- 由于集群到集群同步,数据迁移更加高效和顺畅,在跨数据库集群同步数据时提供了更大的灵活性。
- 通过用户角色变量的实现、对时间序列集合中细粒度更新和删除的支持、改进的缓存刷新时间字段等等,开发人员的体验更加顺畅。
查看 MongoDB 7.0 发行说明,以更深入地了解当前 MongoDB 版本中的最新功能和改进。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 到此为止,我们的云服务器就远程连接上了。
如何在 Ubuntu 22.04 上安装 MongoDB:分步指南
完成以下七个步骤后,你可以在 Ubuntu 22.04 系统上安装和配置 MongoDB。前两个步骤将引导你完成安装过程。其余步骤详细介绍了如何创建数据库和数据库用户,保护数据库服务器,配置远程访问以及使用 MongoDB 数据库。
第一步:在 Ubuntu 22.04 上安装 MongoDB
第一步是安装安装过程中所需的先决条件软件包。为此,请运行以下命令。
sudo apt install software-properties-common gnupg apt-transport-https ca-certificates -y
要安装最新的 MongoDB 软件包,你需要将 MongoDB 软件包存储库添加到 Ubuntu 上的源列表文件中。在此之前,你需要使用 wget 命令在系统上导入 MongoDB 的公钥,如下所示:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
接下来,将 MongoDB 7.0 APT 存储库添加到 /etc/apt/sources.list.d
目录。
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
该命令将 MongoDB 7.0 源列表文件添加到 /etc/apt/sources.list.d/
目录。此文件包含一行,内容为:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse"
添加存储库后,重新加载本地软件包索引。
sudo apt update
该命令刷新本地存储库,并使 Ubuntu 知道新添加的 MongoDB 7.0 存储库。
完成这些操作后,安装提供 MongoDB 的 mongodb-org
元软件包。
sudo apt install mongodb-org -y
该命令安装 MongoDB 数据库服务器以及包括 shell 工具在内的数据库核心组件。安装完成后,验证安装的 MongoDB 版本:
mongod --version
这将列出大量信息,包括版本、Git 和 OPenSSL 版本等详细信息。
第二步:启动 MongoDB 服务
默认情况下,MongoDB 服务在安装后被禁用,你可以通过运行以下命令来验证这一点:
sudo systemctl status mongod
要启动 MongoDB 服务,请执行以下命令:
sudo systemctl start mongod
再次确认服务是否正在运行:
sudo systemctl status mongod
从上面的输出中,你可以看到 MongoDB 正在运行。此外,你可以通过检查服务器是否正在监听其默认端口 27017 来确认数据库是否正在运行。
为此,请运行以下 ss
命令:
$ sudo ss -pnltu | grep 27017
你将在终端上看到以下输出。
在你验证服务是否按预期运行后,你现在可以启用 MongoDB 在启动时启动,如下所示。
sudo systemctl enable mongod
到目前为止,MongoDB 已成功安装并配置为在启动时启动。
第三步:创建 MongoDB 数据库和用户
现在,你的 MongoDB 实例应该正在运行并配置为进行远程访问。
让我们改变方向,探索如何在 MongoDB 中创建数据库和用户。
要访问 MongoDB,请运行以下命令:
mongosh
在你进入 MongoDB shell 之前,你将看到一些关于 MongoDB 的详细信息,例如 MongoDB 和 MongoDB shell 的版本以及 Mongosh 文档的 URL。
在 Mongo shell 提示符上方,你还将看到一个警告,表明尚未为数据库启用访问控制,并且对数据和配置的读写访问受到限制。显示此警告是因为尚未启用身份验证 - 在启用数据库身份验证后,此警告将消失。
默认情况下,安装时会创建三个数据库。它们是 admin
、config
和 local
。要列出现有数据库,请运行以下命令:
show dbs
要创建数据库,请调用 use
命令,后跟数据库名称。例如,要创建名为 employees
的数据库,请运行以下命令:
use employees
要确认你当前所在的数据库,请运行 db
命令。在这种情况下,你将获得 employees
作为输出。
db
MongoDB 提供了几种 shell 方法来管理你的数据库。db.createUser 方法允许你在数据库中创建新用户。
此方法要求你定义用户的用户名和密码以及你希望授予用户的任何角色。此信息以 JSON 格式呈现。
以下是在 employees
数据库上创建具有读取和写入角色的名为 cherry
的用户的语法。
db.createUser(
{
user: "cherry",
pwd: "some_password",
roles: [ { role: "readWrite", db: "employees" } ]
}
)
你可以使用 db.getUsers()
方法列出创建的用户。
db.getUsers();
输出:
或者,运行以下命令:
show users
输出:
要删除用户,请使用 db.dropUser
方法,如下所示。
db.dropUser("cherry", {w: "majority", wtimeout: 4000})
输出:
{ ok: 1 }
第四步:在 Ubuntu 上保护 MongoDB
默认情况下,MongoDB 中未启用身份验证,这意味着任何有权访问数据库服务器的用户都可以查看、添加和删除数据。此漏洞可能会导致你的数据严重泄露,这就是保护 MongoDB 非常重要的原因。在本节中,我们将演示如何在 Ubuntu 22.04 上保护 MongoDB。
第一步,你需要创建一个管理用户,为此,请先访问 Mongo Shell。
mongosh
下一步,连接或切换到 admin 数据库。
use admin
然后,通过粘贴以下行并按键盘上的 ENTER 键来创建数据库用户。
db.createUser(
{
user: "AdminCherry",
pwd: passwordPrompt(),
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
让我们分解一下这段代码。
user: "AdminCherry"
行创建一个名为 AdminCherry
的管理用户。
pwd: passwordPrompt()
方法提示你输入管理用户的密码。它是 pwd:
字段的更安全替代方法,该字段要求你以明文形式键入密码。
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
行定义授予管理用户的角色。在此,管理用户被授予对 admin
数据库的读取和写入权限。由于此角色是在 admin
数据库中定义的,因此管理用户可以读取和修改集群中的所有数据库。
以下是运行该命令后的输出。
运行 exit
命令或按 CTRL + C
退出 Mongo Shell。
有了管理员用户,下一步是启用身份验证。为此,请退出 MongoDB shell 并打开 mongod.conf
文件。
sudo nano /etc/mongod.conf
向下滚动并找到 security
部分。取消注释,添加 authorization
指令,并将其设置为 enabled
。
security:
authorization: enabled
请注意,authorization
参数已缩进,而 security
开头没有空格。
接下来,保存更改并退出配置文件。要应用更改,请重新启动 MongoDB,如下所示。
sudo systemctl restart mongod
此外,检查服务是否按预期运行。
sudo systemctl status mongod
现在登录到 Mongo Shell。
mongosh
这次,你将看到启动警告已消失。
但是,如果你尝试执行任何与数据库相关的任务(例如查看数据库),你将获得一些输出,表明需要进行身份验证。
show dbs
要进行身份验证,请首先通过运行 exit
命令注销 Mongo Shell。然后使用管理用户登录,如下所示。
mongosh -u AdminCherry -p --authenticationDatabase admin
输入管理用户的密码,这次,你之前遇到的身份验证警告将消失。
从这里开始,只有管理用户才能查看、创建和修改数据库中的数据。要退出 shell,请运行 exit
命令。
第五步:配置 MongoDB 以进行远程访问
默认情况下,MongoDB 设置为在安装它的同一服务器上进行本地访问,要启用远程访问,你必须编辑 /etc/mongod.conf
文件,这是 MongoDB 的主配置文件。
此文件包含数据库存储位置、日志记录、网络和进程管理设置。
你可以使用你的文本编辑器访问配置文件。
sudo nano /etc/mongod.conf
找到 network interfaces
部分并注意 bindIP
值。
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
默认情况下,MongoDB 绑定到 127.0.0.1,即环回地址接口,这意味着 MongoDB 只能接受来自安装它的同一服务器的连接。
添加一个逗号,后跟 Mongo 服务器的 IP 地址,以允许远程访问。
bindIp: 127.0.0.1, mongo-server-ip
接下来,保存更改并退出配置文件。要应用这些更改,请重新启动 MongoDB。
sudo systemctl restart mongod
如果启用 UFW,请运行以下命令以允许来自远程计算机的传入连接。
sudo ufw allow from remote_machine_ip to any port 27017
要使更改生效,请重新加载防火墙。
sudo ufw reload
第六步:远程访问 MongoDB
有几种方法可以远程访问 MongoDB shell。你可以使用 Netcat 实用程序来启动与端口 27017 的 TCP 连接,这是 MongoDB 监听的默认端口。
如果客户端机器上仍需要安装它,请按如下方式安装 Netcat。
sudo apt install netcat
接下来,要通过端口 27017 建立与 MongoDB 服务器的连接,请运行以下命令:
nc -zv mongodb_server_ip 27017
以下输出表明连接成功。
输出:
Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!
或者,你可以使用 Mongo Shell 登录,如下所示。
mongosh "mongodb://username@mongo_server_ip:27017"
shell 会自动提示你输入管理员用户的密码。
注意: 要使此操作生效,请确保客户端和远程 MongoDB 服务器上的 Mongo shell 版本相同。
第七步:如何使用 MongoDB - 使用 MongoDB 数据库
你可以在 MongoDB 中执行许多数据库操作。例如,你可以从数据库中创建、检索、更新和删除记录。
1. 插入数据
要在集合中创建文档,请使用 .insertOne()
方法。此方法支持多种数据类型,如字符串、整数、布尔值和数组。
在上一步中,我们创建了一个名为 employees
的测试数据库。现在,我们将创建一个集合并添加一些文档 - 一个集合包含一个或多个文档。
因此,再次使用身份验证登录到 MongoDB 服务器:
mongosh -u AdminCherry -p --authenticationDatabase admin
切换到 employees
数据库。
use employees
运行以下命令,该命令创建一个名为 staff
的集合,并添加一个包含员工用户数据的文档。
db.staff.insertOne({ name: "Alice", age: 25, city: "London", married: true, hobbies: ["Travelling", "Swimming", "Cooking"] })
该命令显示以下输出,确认数据已插入。
输出:
{
acknowledged: true,
insertedId: ObjectId("64f799b4a974192c06cdce9f")
}
2. 检索数据
在 staff
集合中已创建文档的情况下,你可以使用 .find()
方法检索并过滤结果。
例如,要检索 staff
集合中的所有文档,请运行以下命令:
db.staff.find()
输出:
[
{
_id: ObjectId("62647ff866c1f054568a11b5"),
name: 'Alice',
age: 25,
city: 'London',
married: true,
hobbies: [ 'Travelling', 'Swimming', 'Cooking' ]
}
]
现在,让我们尝试添加更多文档并在集合上运行一些查询。
db.staff.insertOne({ name: "Bob", age: 29, city: "Liverpool", married: false, hobbies: ["Hiking", "Watching movies", "Driving"] })
db.staff.insertOne({ name: "Winnie", age: 25, city: "Bristol", married: true, hobbies: ["Playing chess", "Surfing", "Painting"] })
要查询已婚员工的记录,请运行以下命令。
db.staff.find({ married: true })
输出仅提供已婚员工的记录。
输出:
[
{
_id: ObjectId("62647ff866c1f054568a11b5"),
name: 'Alice',
age: 25,
city: 'London',
married: true,
hobbies: [ 'Travelling', 'Swimming', 'Cooking' ]
},
{
_id: ObjectId("626483d6b490694bc675b767"),
name: 'Winnie',
age: 25,
city: 'Bristol',
married: true,
hobbies: [ 'Playing chess', 'Surfing', 'Painting' ]
}
]
3. 更新数据
要更新或修改记录,请使用 .update()
方法。在此示例中,我们将演示如何将第二个记录的 name
值从 Bob
更改为 Robert
。
db.staff.update({ name: "Bob" }, {$set: { name: "Robert" }})
显示的输出确认记录更新成功。
输出:
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
你现在可以查询以查看是否可以找到与名称 Robert
匹配的记录,如下所示。
db.staff.find({ name: "Robert" })
输出:
[
{
_id: ObjectId("64f7a050a974192c06cdcea0"),
name: 'Robert',
age: 29,
city: 'Liverpool',
married: false,
hobbies: [ 'Hiking', 'Watching movies', 'Driving' ]
}
]
4. 删除数据
MongoDB shell 提供了两种删除记录的方法:
.deleteOne()
.deleteMany()
.deleteOne()
方法用于从集合中删除单个记录或文档。例如,要删除 Robert 的记录,请运行以下查询。
db.staff.deleteOne({ name: "Robert"})
.deleteMany()
方法从集合中删除多个文档。
注意 删除单个记录的推荐方法是使用记录的 _id 值。这是赋予每个记录的唯一值,并且优于定义单个条目,例如 name:‘Robert’,这将导致删除所有带有名称 Robert 的记录。
要安全地删除 Robert
的记录而不会无意中删除具有相同条目的其他记录,请改为指定 _id
值。
db.staff.deleteOne({ _id: ObjectId("64f7a050a974192c06cdcea0")})
输出:
{ acknowledged: true, deletedCount: 1 }
此外,你可以根据特定条件删除文档。在这种情况下,使用 .deleteMany()
方法删除多个记录。
例如,要删除 staff
集合中所有已婚员工的文档,请运行以下命令:
db.staff.deleteMany({married: true})
输出:
{ acknowledged: true, deletedCount: 1 }
要删除集合中的所有文档,请使用不带参数的 deleteMany()
方法:
db.staff.deleteMany({})
如果你尝试查询该集合,你将看到输出将为空白,这清楚地表明所有文档都已被删除,并且该集合现在为空。
总结
本教程介绍了如何在 Ubuntu 22.04 上安装 MongoDB 并开始使用此强大的开源数据库。在其官方网站上,你可以找到有关 MongoDB 高级功能和用例的更多文档。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site