如何在 Ubuntu 22.04 上安装以及使用 MongoDB

server/2024/12/27 18:35:19/

简介

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 后点击确定。

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器

  • 到此为止,我们的云服务器就远程连接上了。

如何在 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 提示符上方,你还将看到一个警告,表明尚未为数据库启用访问控制,并且对数据和配置的读写访问受到限制。显示此警告是因为尚未启用身份验证 - 在启用数据库身份验证后,此警告将消失。

默认情况下,安装时会创建三个数据库。它们是 adminconfiglocal。要列出现有数据库,请运行以下命令:

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: 27017bindIp: 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


http://www.ppmy.cn/server/153688.html

相关文章

CSS系列(33)-- Perspective详解

前端技术探索系列:CSS Perspective详解 🎲 致读者:探索3D空间的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Perspective,这个强大的3D透视特性。 基础概念 🚀 透视设置 /* 基础透视 *…

21天掌握JavaWeb - 第17天:前端页面开发与集成测试

目标 在本章节中,我们将学习如何根据后端API编写前端页面,并进行集成测试以确保前后端功能正常。 前端页面开发 核心概念 前端页面开发通常涉及HTML、CSS和JavaScript的使用,以构建用户界面和交互逻辑。 优势 用户体验:良好…

【git】配置ssh代理

git 配置ssh代理 ssh 访问时,配置了http代理,不管用 可以切换为http clone, 或者要对ssh配置代理。 测试gitlab网络 出现此错误表明在克隆代码仓库时遇到了网络连接或权限问题。以下是解决步骤: 检查网络连接 Ping 测试:在命令行中执行:ping gitlab.myweb.com 检查是否可…

黑马Java面试教程_P9_JVM虚拟机

系列博客目录 文章目录 系列博客目录前言1. JVM组成1.1 JVM由那些部分组成,运行流程是什么?3 41.2 什么是程序计数器?3 4总结 1.3 你能给我详细的介绍Java堆吗? 3 4总结 1.4 什么是虚拟机栈 3 4总结 1.6 能不能解释一下方法区? 3…

OpenEuler22.04配置zookeeper+kafka三节点集群

OpenEuler22.04配置zookeeperkafka三节点集群 1. 基础环境2. 部署zookeeper集群2.1 下载、解压2.2 配置2.3 配置zookeeper服务 3. 配置kafka集群3.1 下载解压3.2 配置3.3 配置服务3.4 kafka常用命令 4. 其它 感觉OpenEuler的操作方式跟centos区别不大,下面的操作在c…

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…

tcp 的三次握手与四次挥手

问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…

PyQt实战——实现编码器与进度条之间的通信,使进度条反映编码进度(十二)

系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序入口QMainWindow(三&…