如何在 Debian 上安装和使用 MongoDB如何在 Debian 上安装和使用 MongoDB如何在 Debian 上安装和使用 MongoDB如何在 Debian 上安装和使用 MongoDB
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 上安装和使用 MongoDB

MongoDB 是一个开源、跨平台、分布式 NoSQL(非 SQL 或非关系型)数据库系统。 MongoDB使用灵活的文档来存储各种数据形式,而不是像传统SQL数据库那样将数据存储在表中。 MongoDB 使用 BSON 格式存储数据,即二进制 JSON 格式。

MongoDB 是一个分布式 NoSQL 数据库,内置高可用性、自动故障转移和数据冗余,以及通过跨分布式集群分片进行水平扩展,并且支持多区域地理部署。 MongoDB 还提供查询 API,支持 CRUD 操作(读取和写入)、数据聚合管道、文本搜索和地理空间查询。

使用 MongoDB 的一些著名公司包括福布斯、丰田、SEGA、EA、沃达丰、Verizon 等等。

在本指南中,您将在 Debian 11 服务器上安装 MongoDB NoSQL 数据库。您还将针对 MongoDB 部署优化 Debian 服务器。在本指南的最后,您还将学习一些 MongoDB 操作,即 MongoDB 中的基本 CRUD(创建、读取、更新和删除)。

通过完成本指南,您将在优化的 Linux 服务器上安装并运行 MongoDB。此外,您还将了解和了解一些基本的 MongoDB 操作,包括创建用户和数据库、插入和检索数据、更新数据以及删除 MongoDB 中的数据。

先决条件

要完成本指南,您必须满足以下要求:

  • Debian 11 或 Debian 12 服务器 - 本示例使用主机名为“mongodb-server”的 Debian 服务器。
  • 具有 sudo/root 权限的非 root 用户。

准备好所有先决条件后,您现在就可以开始 MongoDB 安装了。

添加 MongoDB 存储库

要安装 MongoDB,您必须将官方 MongoDB 存储库添加到您的系统中。在撰写本文时,MongoDB 的最新版本是 v6.0。在第一步中,您将 MongoDB 存储库添加到 Debian 11 系统。

在开始之前,请运行以下 apt 命令来更新和刷新您的包索引。然后,安装一些基本的依赖项,例如gnupg2和apt-transport-https。

sudo apt update
sudo apt install gnupg2 apt-transport-https wget curl

出现提示时,输入 y 进行确认,然后按 ENTER。

安装依赖项后,运行以下命令下载并添加 MongoDB 存储库的 GPG 密钥。这将自动将 GPG 密钥“server-6.0.asc”转换为“/usr/share/keyrings/mongodb-org-6.0.gpg”。

wget -q -O- https://www.mongodb.org/static/pgp/server-6.0.asc | \
    gpg --dearmor | sudo tee /usr/share/keyrings/mongodb-org-6.0.gpg > /dev/null 2>&1

现在运行以下命令来添加 MongoDB v6.0 的 MongoDB 存储库。

在 Debian 11 上

echo "deb [signed-by=/usr/share/keyrings/mongodb-org-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | \
    sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

在 Debian 12 上

echo "deb [signed-by=/usr/share/keyrings/mongodb-org-6.0.gpg] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/6.0 main" | \
    sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

对于 Debian 11 和 12

最后,通过下面的 apt 命令更新并刷新您的包索引。这将检索 MongoDB 存储库的新元数据。

sudo apt update

您应该收到如下输出:

接下来,您将开始安装 MongoDB,并将 MongoDB 存储库添加到您的 Debian 系统。

安装 MongoDB 服务器和 Mongosh

在此步骤中,您将安装 MongoDB 服务器包和 mongosh 作为 Debian 服务器的 MongoDB 客户端。您将安装最新版本的 MongoDB 服务器和 Mongosh v6.0。

运行以下 apt 命令来安装“mongodb-org”和“mongodb-mongosh”软件包。

sudo apt install mongodb-org mongodb-mongosh

出现提示时输入 y,然后按 ENTER 继续。

安装 MongoDB 后,运行以下 systemctl 命令实用程序来启动并启用 MongoDB 服务。

sudo systemctl start mongod
sudo systemctl enable mongod

现在通过以下命令验证 MongoDB 服务。您应该看到 MongoDB 服务已启用,并且将在启动时自动运行。并且MongoDB服务的状态是正在运行。

sudo systemctl status mongod

现在,您已在 Debian 11 服务器上安装了 MongoDB 服务器。在下一步中,您将设置和优化 Debian 服务器以进行 MongoDB 部署。

设置系统

在此步骤中,您将针对 MongoDB 安装优化 Debian 服务器。首先,您将通过 systemd 服务文件在系统上禁用透明大页 (THP),然后增加 ulimit 和最大虚拟内存。

首先,您将禁用透明大页 (THP)。为此,请使用以下 nano 编辑器命令创建一个新的 systemd 服务文件“/etc/systemd/system/disable-thp.service”。

sudo nano /etc/systemd/system/disable-thp.service

将以下行添加到文件中。此服务将通过替换文件“/sys/kernel/mm/transparent_hugepage/enabled”和“/sys/kernel/mm/transparent_hugepage/defrag”的内容来禁用 THP到“从不”。

[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

完成后保存文件并退出编辑器。

现在运行以下 systemctl 命令来重新加载 systemd 管理器并应用更改。

sudo systemctl daemon-reload

之后,通过以下 systemctl 命令实用程序启动并启用服务“disable-thp”。这样,您现在就可以在每次启动时禁用 THP。

sudo systemctl enable disable-thp
sudo systemctl start disable-thp

禁用 THP 后,您需要增加 MongoDB 服务器的 ulimit。

Linux 系统上默认的 ulimit 为“1024”,而 MongoDB 服务器至少需要 ulimit“64000”。现在,您将通过系统限制配置文件增加特定 MongoDB 用户的 ulimit。

使用以下 nano 编辑器命令创建一个新的配置文件'/etc/security/limits.d/mongodb.conf'。

sudo nano /etc/security/limits.d/mongodb.conf

将以下行添加到文件中。这样,您将增加特定 MongoDB 用户“mongod”的 ulimit。

mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

完成后保存并退出编辑器。

现在配置了 ulimit,您现在可以通过'/etc/sysctl.conf' 文件增加 Debian 服务器上的最大虚拟内存。

使用以下 nano 编辑器命令打开文件'/etc/sysctl.conf'。

sudo nano /etc/sysctl.conf

将以下行添加到该行的末尾。

fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

完成后保存文件并退出编辑器。

最后,运行以下命令重新启动 MongoDB 服务器并应用您所做的系统更改。

sudo reboot

现在您的 Debian 服务器将在禁用 THP 的情况下运行,“mongod”用户的 ulimit 增加,最大虚拟内存也增加。在下一步中,您将了解如何通过创建管理员用户并启用身份验证和授权来保护 MongoDB。

设置管理 MongoDB

在此步骤中,您将学习如何通过“mongosh”MongoDB 客户端在 MongoDB 中创建新用户。然后,您还可以通过“/etc/mongod.conf”文件在 MongoDB 服务器上启用身份验证和授权。

通过下面的“mongosh”命令登录 MongoDB shell。

mongosh

登录后,您应该连接到默认数据库“test”。

现在运行以下查询以禁用 MongoDB 服务器上的免费监控。

db.disableFreeMonitoring()

接下来,显示数据库“admin”并使用以下 MongoDB 查询创建一个新的 MongoDB 管理员用户“myAdminUser”。系统还会提示您为新用户设置密码。

use admin
db.createUser(
  {
    user: "myAdminUser",
    pwd: passwordPrompt(),
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

创建新用户和密码后,您将在终端屏幕上看到诸如“{ ok: 1 }”之类的输出。这意味着您已成功创建新用户。

现在按 Ctrl+d 或输入 quit 退出 MongoDB shell。

为 MongoDB 创建新的管理员用户后,您将在 MongoDB 服务器上启用身份验证和授权。

运行以下 nano 编辑器命令以打开 MongoDB 配置文件'/etc/mongod.conf'。

sudo nano /etc/mongod.conf

取消注释“安全”参数并添加选项“授权:已启用”,如下所示。

security:
    authorization: enabled

保存文件并退出编辑器。

最后,运行以下 systemctl 命令实用程序以重新启动 MongoDB 服务并应用更改。

sudo systemctl restart mongod

至此,您现在已经为 MongoDB 服务器“myAdminuser”创建了一个管理员用户并创建了密码。此外,您还通过配置文件“/etc/mongod.conf”在 MongoDB 服务器上启用了身份验证和授权。在下一步中,您将验证 MongoDB 管理员用户并验证身份验证,以确保您已保护 MongoDB 部署。

验证 MongoDB 管理员用户

在此步骤中,您将通过 mongosh 命令登录 MongoDB 服务器来验证新的 MongoDB 管理员用户,并使用新的管理员用户验证身份验证。

运行以下命令登录 MongoDB shell。

mongosh

现在运行以下查询以使用新的 MongoDB 管理员用户“myAdminUser”进行身份验证。出现提示时,输入您的 MongoDB 管理员用户。

use admin
db.auth("myAdminUser", passwordPrompt())

成功后,您应该收到诸如 '{ ok: 1 }' 之类的输出。

您还可以使用一行命令连接到 MongoDB 并同时进行身份验证。运行以下“mongosh”命令,通过管理员用户“myAdminUser”连接到默认在端口 27017 上运行的 MongoDB 服务器。

mongosh --port 27017 --authenticationDatabase \
    "admin" -u "myAdminUser" -p

当提示输入密码时,输入您的 MongoDB 管理员,您现在应该登录到 MongoDB shell。

现在运行以下查询来验证当前与 MongoDB 服务器的连接。

db.runCommand({connectionStatus : 1})

您应该收到与此类似的输出 - 您已连接到 MongoDB 服务器并以管理员用户“myAdminUser”身份进行身份验证。

在 MongoDB 上创建用户和数据库

在此步骤中,您将了解如何创建可用于您的应用程序的新 MongoDB 用户。您将创建一个具有特定数据库访问(读取或写入)权限的新 MongoDB 用户。您还将通过登录 MongoDB shell 并验证详细连接来验证新的 MongoDB 用户。

在开始之前,请确保您已登录 MongoDB 服务器。然后,使用以下查询切换到数据库“testdb”。

use tesdb

现在运行以下查询来创建新的 MongoDB 用户。在此示例中,您将创建一个新用户“MyTestUser”,其角色为“readWrite”,数据库为“testdb”,角色为“ 读取”到数据库“报告”。

db.createUser(
  {
    user: "myTestUser",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ { role: "readWrite", db: "testdb" },
             { role: "read", db: "reporting" } ]
  }
)

出现提示时,输入新用户的密码。然后您将收到诸如“{ ok: 1 }”之类的输出,这意味着新用户已创建。

创建新的 MongoDB 用户后,您现在将验证 MongoDB 上的用户列表。

运行以下查询切换到数据库“admin”。然后,验证 MongoDB 服务器上的用户列表。

use admin
db.system.users.find()

您应该收到如下输出 - 新用户“myTestUser”已创建。

按 Ctrl+d 或输入 quit 从 MongoDB shell 退出/注销。

最后,运行以下 mongosh 命令通过新用户“myTestUser”登录 MongoDB。输入您的用户的密码。

mongosh --port 27017 -u "myTestUser" \
    --authenticationDatabase "testdb" -p

登录后,运行以下查询来验证当前连接的状态。

db.runCommand({connectionStatus : 1})

您应该收到与此类似的输出 - 现在,您已经登录到 MongoDB 服务器并被授权为新用户“myTestUser”。

这样,您现在就创建了一个新的 MongoDB 用户“myTestUser”,可用于您的应用程序部署。该用户还具有对数据库“testdb”的“readWrite”权限/角色以及对数据库“read”的只读角色报告'。

在下一步中,您将学习 MongoDB 的基本操作,包括惰性和检索数据、更新数据以及从 MongoDB 服务器删除数据。

插入和查询数据

创建新的 MongoDB 用户后,您现在将了解如何创建数据库、插入数据以及从 MongoDB 检索数据。您将学习如何使用“insertOne”查询和“insertMany”查询将数据添加到 MongoDB,并了解如何使用“$in”和“$gte”等查询运算符。

首先,使用以下查询切换到数据库“testdb”。

use testdb

运行以下查询插入新数据并在数据库“testdb”中创建新集合。在此示例中,您将在数据库“testdb”中创建一个新集合“movies”,并使用“inertOne” ' 查询插入新数据。

“insertOne”查询用于向 MongoDB 集合添加新的一个/单个数据。

db.movies.insertOne(
  {
    title: "The Hobbit",
    genres: [ "Adventure", "Fantasy" ],
    runtime: 172,
    rated: "R",
    year: 2012,
    directors: [ "Peter Jackson" ],
    cast: [ "Martin Freeman", "Ian McKellen", "Richard Armitage" ],
    type: "movie"
  }
)

您现在将收到诸如“acknowledged: ok”之类的输出,这意味着已添加新数据并创建新集合。

现在运行以下查询来验证数据库“testdb”上的集合列表,并显示“testdb”中的可用数据。

“显示集合”查询将显示当前数据库中的集合/表的列表,“查找”查询将显示数据库中的可用数据。您还可以通过“查找”查询过滤特定字段。

show collections
db.movies.find( { title: "The Hobbit" } )

您应该收到如下输出 - 集合“movies”在“testdb”数据库中可用。此外,您还将获得已添加的新数据,即

接下来,您还可以通过“insertMany”查询一次添加多个数据。运行以下查询,通过“insertMany”查询将两个数据插入到“movies”集合中。

db.movies.insertMany([
   {
      title: "The Lord of the Rings",
      genres: [ "Action", "Adventure", "Drama" ],
      runtime: 240,
      rated: "PG-13",
      year: 2001,
      directors: [ "Peter Jackson" ],
      cast: [ "Elijah Wood", "Ian McKellen", "Orlando Bloom" ],
      type: "movie"
    },
    {
      title: "Harry Potter",
      genres: [ "Adventure", "Family", "Fantasy" ],
      runtime: 140,
      rated: "R",
      year: 2007,
      directors: [ "David Yates" ],
      cast: [ "Daniel Radcliffe", "Emma Watson", "Rupert Grint" ],
      type: "movie"
    },
    {
    title: "Transformers",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 150,
    rated: "PG-13",
    year: 2007,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Megan Fox", "Josh Duhamel" ],
    type: "movie"
    }
])

输出 :

现在运行下面的“查找”查询来检索您的数据。这样,您将使用过滤器“导演:“Peter Jackson””检索数据。

db.movies.find( { directors: "Peter Jackson" })

您将收到如下输出 - 任何带有“导演:“Peter Jackson””的电影都将显示在您的终端上。

接下来,您还可以使用查询运算符在“查找”查询中指定条件。

运行以下查询以检索“流派”为“动作”、“家庭”和/或“”的任何数据科幻小说'。 “$in”运算符可用于检索与数组中指定的任何值匹配的数据。

db.movies.find( { genres: { $in: [ "Action", "Family", "Sci-Fi" ] } } )

您可以尝试的另一个查询运算符是“$gte”,它可用于检索大于或等于指定值的数据。

运行以下查询以使用“$gte”查询运算符检索数据。这将检索任何具有“流派:“冒险””且运行时间大于或等于“150”的电影。

db.movies.find( { genres: "Adventure", "runtime": { $gte: 150 } } )

您将收到与此类似的输出 - 在此示例中,您将获得三部运行时间大于或等于“150”且类型为“冒险”的电影'。

考虑到这一点,您现在已经了解了如何在 MongoDB 中插入和检索数据。您已经了解了用于添加一项数据的基本查询“insertOne”和用于一次添加一些数据的“insertMany”查询。

然后,您还了解了“find”查询从 MongoDB 检索数据的基本用法。除此之外,您还学习了如何在 MongoDB 中使用运算符查询“$in”和“$gte”。

在下一步中,您将学习如何更新 MongoDB 集合中的数据。

更新 MongoDB 中的数据

在此步骤中,您将了解如何使用两个查询来更新 MongoDB 中的数据,“updateOne”用于更新文档中的一个字段,并使用“replaceOne”来更新文档中的一个字段。用新数据完全替换第一个匹配的数据。

要更新 MongoDB 中的数据,您可以使用多种方法和查询。在此示例中,您将了解如何使用“updateOne”和“replaceOne”查询。 “updateOne”查询可用于更新文档中的单个字段,而“replaceOne”查询将替换整个文档。

运行以下查询以使用“updateOne”查询更新数据。在此示例中,您将电影“变形金刚PG-13””更新为“评级:“R””强>'。

db.movies.updateOne( { title: "Transformers" },
{
  $set: {
    rated: "R"
  }
})

您应该收到“matchedCount: 1”和“modifiedCount: 1”等输出。

现在使用以下查询验证新数据。您应该会看到电影“变形金刚”的数据已更新。

db.movies.find( { title: "Transformers" })

接下来,运行下面的“replaceOne”查询来替换过滤器中第一个匹配的数据,并用新数据替换整个文档。在此示例中,您将使用新数据替换电影“变形金刚”中的整个文档。

db.movies.replaceOne(
  { title: "Transformers" },
  {
    title: "Transformers: Dark of the Moon",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 160,
    rated: "PG-13",
    year: 2011,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Rosie Huntington-Whiteley", "Tyrese Gibson" ],
    type: "movie"
  }
)

您现在应该得到这样的输出。

现在运行以下查询来验证 MongoDB 上新更新的数据。

db.movies.find( { title: "Transformers" })
db.movies.find( { title: "Transformers: Dark of the Moon" })

您应该收到与此类似的输出 - 电影“变形金刚”已被删除/替换为新电影“变形金刚:月黑之时”。

删除 MongoDB 中的数据

在此步骤中,您将学习如何删除 MongoDB 文档中的数据。然后,您将学习如何在 MongoDB 中删除数据库和删除用户。

运行以下命令从 MongoDB 集合中删除数据。在此示例中,您将通过“deleteMany”查询删除整个文档“Transformers: Dark of the Moon”。

db.movies.deleteMany( { title: "Transformers: Dark of the Moon" } )
db.movies.find( { title: "Transformers: Dark of the Moon" })

您应该收到诸如“deletedCount: 1”之类的输出。

接下来,运行以下命令,通过下面的“deleteOne”查询删除单个文档。这将删除过滤器中第一个匹配的数据。

在此示例中,您将删除与“cast: "Ian McKellen"”匹配的第一个文档。

db.movies.deleteOne( { cast: "Ian McKellen" } )
db.movies.find( { cast: "Ian McKellen" })

以下是删除数据之前和之后的输出。

删除之前 - 您应该会看到两部由“演员阵容:“Ian McKellen””主演的电影。

删除文档后,您应该只能看到一部带有“演员阵容:“Ian McKellen””的电影。

接下来,您将学习如何删除 MongoDB 中的用户和数据库。要删除 MongoDB 中的用户,您的 MongoDB 管理员用户必须具有“root”角色。

运行以下命令以 MongoDB 管理员用户“myAliceAdmin”身份进行身份验证并输入您的密码。

use admin
db.auth("myAdminUser", passwordPrompt())

身份验证后,运行以下查询为管理员用户授予“root”角色。

db.grantRolesToUser("myAdminUser", ["root"]);

现在切换到“testdb”并通过以下查询删除数据库“testdb”中的用户。这将从 MongoDB 中删除用户“myTestUser”。

use testdb
db.runCommand( { dropAllUsersFromDatabase: 1 } )

您应该得到诸如“{ n:1, ok: 1 }”之类的输出。

接下来,运行以下查询来删除/删除数据库“testdb”。

db.dropDatabase()

您应该得到诸如“{ ok: 1, Dropped: 'testdb' }”之类的输出。

现在数据库中的“testdb”和用户已被删除。

运行以下查询切换到数据库“admin”并验证 MongoDB 服务器上的数据库列表。您应该看到“testdb”数据库已被删除。

use admin
show dbs

最后,运行以下查询来显示并列出 MongoDB 上的用户。

db.system.users.find()

您应该收到如下输出 - 使用 'myTestUser' 已从 MongoDB 服务器中删除/删除。

结论

在本指南中,您已在 Debian 服务器上安装了最新版本的 MongoDB Server(社区版)。您还了解了如何在 MongoDB 服务器上启用身份验证和授权,以及如何针对 MongoDB 部署优化 Linux 服务器。

在此过程中,您已经了解了 Mongosh 命令用于连接和管理 MongoDB 服务器的基本用法。并学习了用于创建用户、创建数据库、插入和检索数据、更新数据以及从 MongoDB 服务器删除/删除数据的基本 MongoDB 查询。

通过此,您可以在 MongoDB 文档中了解有关 MongoDB 查询的更多信息。另外,如果您有兴趣在大型部署中部署 MongoDB,您可以尝试启用分片,以便在 MongoDB 集群中设置水平扩展。

©2015-2025 艾丽卡 support@alaica.com