MongoDB 指南 - 入门

2025-06-08

MongoDB 指南 - 入门

概括

在本指南中,我将介绍 MongoDB 的入门和运行基础知识。学习新技术的最佳方式是直接上手并开始使用。因此,在简要介绍 MongoDB 之后,接下来的部分将介绍如何使用 4 种不同的托管方式搭建您自己的 MongoDB 实例。接下来,我将介绍 5 种可用于操作 MongoDB 数据库的工具。下一节将演示如何创建您自己的数据库和包含数据的集合。在本部分中,我还提供了一些示例,演示了一些用于查询数据的基本查询。

本指南总结如下:

  • MongoDB 是什么
  • MongoDB 设置
    • 本地安装和托管
    • 使用 Docker 安装和托管
    • 使用 MongoDB Atlas 托管
    • 与 MLab 一起主持
  • MongoDB 工具
    • MongoDB Shell
    • MongoDb 指南针
    • NoSqlBooster
    • Robo 3T
    • Visual Studio 代码
  • 基本 MongoDB 命令
  • 结论

最后,本指南并未涵盖使用 MongoDB 的理由(或许以后会另行介绍)。但是,我鼓励读者花些时间研究和理解选择 NoSql 数据库而非 SQL 数据库的理由。MongoDB 并非 SQL 数据库的替代品。它只是一种可能(也可能不)更符合个人特定需求的替代方案。

Quora 上发布的以下问题可能是一个很好的起点:

使用传统 RDBMS 而不是 NoSQL 的原因有哪些?

从我个人的经验和角度来看,如果你的数据需要不可知性,那么在选择 NoSql 数据库之前应该仔细考虑。在这种情况下,我发现 SQL 数据库是一个更好的选择,因为它可以简单地建模数据,并以多种不同的方式为不同的应用程序提供数据。

原始指南可以在我的Github 仓库中找到。与我的Docker 指南一样,我会随着时间的推移更新并向此仓库添加更多内容。


什么是 MongoDB?

MongoDB 是一个数据库。更具体地说,它是一个面向文档的开源数据库,旨在为开发人员和系统管理员提供可扩展性和易用性。传统的关系数据库管理系统 (RDBMS),例如 MSSQL、Oracle、MySQL 和 PostGreSQL,将数据存储在具有由行和列组成的静态模式的表中。然而,MongoDB 将其数据存储在具有动态模式的类似 JSON 的文档中。


MongoDB 设置

我将讨论启动和运行 MongoDB 的 4 个选项:

  • 本地安装和托管
  • 在 Docker 中安装并托管
  • 注册并使用 MongoDB Atlas(数据库即服务)
  • 注册并使用 MLab(数据库即服务)

本地安装和托管

安装 MongoDB 相对简单。目前有 3 个平台(Windows、Linux、OSX)可用版本,可在此处找到

更具体的安装说明请参见以下链接:

使用 Docker 安装和托管

如果您以前从未使用过Docker,那么此选项不太适合您,因为它要求您具备一些 Docker 知识和经验。但是,如果您仍然有兴趣尝试此选项,我建议您先阅读我的Docker 指南。我还有一个Docker 速查表,您可能会觉得有用。

将要使用的 Docker 镜像是官方的 Docker MongoDB 镜像

运行 MongoDB

使用命名卷运行 MongoDB

对于以下示例,我将 Docker MongoDB 端口27017映射到本地端口37017。这样做的原因是,我正在运行的 MongoDB 本地实例已经在使用27017端口。

要运行新的 MongoDB 容器,请从 CLI 执行以下命令:

docker run --rm --name mongo-dev -p 37017:27017 -v mongo-dev-db:/data/db -d mongo
Enter fullscreen mode Exit fullscreen mode
CLI 命令 描述
--rm 停止时移除容器
--name mongo-dev 给容器一个自定义名称
-p 将容器发布端口映射到本地端口
-v mongo-dev-db/数据/db 将容器卷“data/db”映射到自定义名称“mongo-dev-db”
-d 蒙戈 在后台以守护进程的形式运行 mongo 容器
使用绑定挂载运行 MongoDB
cd
mkdir -p mongodb/data/db
docker run --rm --name mongo-dev -p 37017:27017 -v ~/mongodb/data/db:/data/db -d mongo
Enter fullscreen mode Exit fullscreen mode
CLI 命令 描述
--rm 停止时移除容器
--name mongo-dev 给容器一个自定义名称
-p 将容器发布端口映射到本地端口
-v ~/mongodb/数据/db/数据/db 将容器卷“data/db”映射到绑定挂载“~/mongodb/data/db”
-d 蒙戈 在后台以守护进程的形式运行 mongo 容器

访问 MongoDB

从本地机器访问 MongoDB
  1. 输入以下命令来访问 docker 容器内托管的 MongoDB 实例:
   mongo --host localhost --port 37017
Enter fullscreen mode Exit fullscreen mode
通过 Docker Interactive TTY 访问 MongoDB

访问 MongoDB shell 有两个步骤。

  1. 首先,通过执行以下命令访问 MongoDB 容器 shell:
   docker exec -it mongo-dev bash
Enter fullscreen mode Exit fullscreen mode

这将在 MongoDB 容器上打开一个交互式 shell(bash)。

  1. 其次,进入容器 shell 后,通过执行以下命令访问 MongoDB shell:
   mongo localhost
Enter fullscreen mode Exit fullscreen mode

使用 MongoDB Atlas 托管

MongoDB Atlas是一款数据即服务 (DaaS)产品,托管在云端。无需安装 MongoDB,并提供免费套餐。

首先,请点击此处注册一个免费套餐账户。免费套餐可享 512MB 存储空间。

请查看[MongoDB Atlas 文档]以获取更多信息。

在Atlas上注册并设置 MongoDB 实例后,您将看到类似下图的仪表板:

阿特拉斯

与 MLab 一起主持

MLab是一款数据即服务 (DaaS)产品,托管在云端。无需安装 MongoDB,并提供免费套餐。

首先,请在此处注册免费帐户。免费套餐可享 500MB 存储空间。

请查看MLab 文档以获取更多信息。

在MLab上注册并设置 MongoDB 实例后,您将看到类似下图的仪表板:

实验室


MongoDB 工具

MongoDB 的工具最近有了很大的改进,有很多选择。我使用过以下工具,觉得它们都很好用。这其实取决于个人喜好,但我发现自己更喜欢把它们搭配使用。

MongoDB 外壳

MongoDB shell 是与 MongoDB 数据库交互的默认方式。

  • 连接到 MongoDB
  mongo localhost
Enter fullscreen mode Exit fullscreen mode
  • 列出可用数据库
  show dbs
Enter fullscreen mode Exit fullscreen mode
  • 创建数据库
  use message_db
Enter fullscreen mode Exit fullscreen mode
  • 创建收藏夹
  db.messages.insert({ message: 'hello mongodb' })
Enter fullscreen mode Exit fullscreen mode
  • 列表集合
  show collections
Enter fullscreen mode Exit fullscreen mode

MongoDB 指南针

MongoDB Compass是一个图形用户界面 (GUI) 工具,允许您探索 MongoDB 数据。

  • 它有免费附加功能
  • 它是跨平台的,适用于 Linux、Windows 和 Mac
  • 它支持以下主要功能:

    • 运行临时查询
    • 对数据执行 CRUD 操作
    • 查看和优化查询性能

在下面的屏幕截图中,我使用 MongoDB Compass 连接到本地机器上运行的 MongoDB。

罗盘

有关 MongoDB Compass 的更多信息,请访问此处

NoSqlBooster

NoSqlBooster是一个图形用户界面 (GUI),它提供了一个易于使用的界面来处理您的 MongoDB 数据库。

  • 它有免费附加功能
  • 它是跨平台的,适用于 Linux、Windows 和 Mac
  • 它提供以下功能:

    • Shell 扩展
    • MongoDB 的流畅查询 API
    • 使用 SQL 查询 MongoDB
    • 在脚本中使用 Node 模块

在下面的屏幕截图中,我使用 NoSqlBooster 连接到在 Docker 上运行的 MongoDB。

nosqlbooster

欲了解更多信息,请访问NoSqlBooster官方网站

Robo 3T

Robo 3T是一款免费的 GUI 工具,可用于探索您的 MongoDB 数据库。

  • 可免费使用。
  • 它是跨平台的,适用于 Linux、Windows 和 Mac
  • 它提供了带有嵌入式 shell 的 MongoDB GUI

在下面的屏幕截图中,我使用 Robo 3T 连接到 MongoDB 的本地实例:

机器人3t

Robo 3T可在此处下载

欲了解更多信息,请点击这里

Visual Studio 代码

使用Azure CosmosDB 扩展,除了Azure CosmosDB数据库之外,还可以连接到 MongoDB 数据库。

有关详细信息,请参阅以下链接:

安装 Azure CosmosDB 扩展

  • 启动 VS Code
  • ctrl+P从 VS Code 内部启动“快速打开”( )
  • 粘贴以下命令并按 Enter
  ext install ms-vscode.vscode-azureextensionpack
Enter fullscreen mode Exit fullscreen mode

配置用户设置

安装扩展程序后,您需要确保在用户设置中配置了 Mongo 的路径。点击Ctrl+,打开用户设置。由于我使用的是 Linux 操作系统,因此需要在用户设置 json 文件中添加以下设置:

"mongo.shell.path": "/var/lib/mongodb",
Enter fullscreen mode Exit fullscreen mode

在 localhost 上连接到 Mongo

要连接到 MongoDB 实例,请按照以下步骤操作:

  • 展开位于资源管理器中的Azure Cosmos DB扩展面板
  • 选择“附加数据库帐户”选项
  • 选择 MongoDB
  • 输入 MongoDB 实例的连接详细信息
  mongodb://localhost:27017
Enter fullscreen mode Exit fullscreen mode

步骤如下:

vs-code-cosmodb-ext

使用 Mongo ScrapBooks 运行命令

要使用“剪贴簿功能”,请按照以下步骤操作:

  • 按照上面所示连接到你的 MongoDB 实例
  • 连接到您选择的数据库
  • 选择“New MongoDB ScrapBook”选项打开剪贴簿编辑器
  • 输入 MongoDB 命令
  • 按下Ctrl+Shft+'执行

步骤如下:

vs-code-剪贴簿

在撰写本文时, Mongo ScrapBooks似乎存在问题


基本 MongoDB 命令

MongoDB 实例运行或托管后,打开 Mongoshell 连接到 MongoDB 服务器。为了演示,我将使用本地安装的“localhost”。

  • 连接到 MongoDB 实例
  mongo localhost
Enter fullscreen mode Exit fullscreen mode
  • 创建“zips_db”数据库
  use zips_db
Enter fullscreen mode Exit fullscreen mode
  • 创建“zips”集合
  db.zips.insertMany([
     { "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 5338, "state" : "MA", "_id" : "01001" },
     { "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA", "_id" : "01002" },
     { "city" : "BARRE", "loc" : [ -72.10835400000001, 42.409698 ], "pop" : 4546, "state" : "MA", "_id" : "01005" },
     { "city" : "BELCHERTOWN", "loc" : [ -72.41095300000001, 42.275103 ], "pop" : 10579, "state" : "MA", "_id" : "01007" },
     { "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 240, "state" : "MA", "_id" : "01008" },
     { "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 706, "state" : "MA", "_id" : "01010" },
     { "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 688, "state" : "MA", "_id" : "01011" },
     { "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop"  177, "state" : "MA", "_id" : "01012" },
     { "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 3396, "state" : "MA", "_id" : "01013" },
     { "city" : "CHICOPEE", "loc" : [ -72.576142, 42.176443 ], "pop" : 1495, "state" : "MA", "_id" : "01020" }
   ])
Enter fullscreen mode Exit fullscreen mode
  • 搜索查询

    • 获取集合总数
  db.zips.count()
Enter fullscreen mode Exit fullscreen mode
  • 获取所有 zip 文件
  db.zips.find().pretty()
Enter fullscreen mode Exit fullscreen mode
  • 获取 5 个 zip 文件
  db.zips.find().limit(5).pretty()
Enter fullscreen mode Exit fullscreen mode
  • 获取城市名称为“BLANDFORD”的邮政编码
  db.zips.find({"city": "BLANDFORD"})
Enter fullscreen mode Exit fullscreen mode
  • 获取城市名称为“BLANDFORD”的邮政编码,忽略大小写
  db.zips.find({"city": { "$regex": /blandford/i } })
Enter fullscreen mode Exit fullscreen mode
  • 获取城市名称为“BLANDFORD”和“BRIMFIELD”的邮政编码
  db.zips.find({"city": { "$in": ["BLANDFORD", "BRIMFIELD"] } }).pretty()
Enter fullscreen mode Exit fullscreen mode
  • 获取城市名称为“BLANDFORD”和“BRIMFIELD”的邮政编码,忽略大小写
  db.zips.find({"city": { "$in": [ /blandford/i, /brimfield/i] } }).pretty ()
Enter fullscreen mode Exit fullscreen mode
  • 获取人口大于或等于 30000 的 zip 文档
  db.zips.find({"pop": { "$gte": 30000}}).pretty()
Enter fullscreen mode Exit fullscreen mode
  • 获取所有 zip 文件并使用投影仅显示城市和人口
  db.zips.find({}, { "city": 1, "pop": 1, "_id": 0 })
Enter fullscreen mode Exit fullscreen mode
  • 获取所有 zip 文件,并使用投影仅显示城市和人口。按城市名称降序排列文档
  db.zips.find({}, { "city": 1, "pop": 1, "_id": 0 }).sort({"city": -1})
Enter fullscreen mode Exit fullscreen mode
  • 删除操作

    • 删除所有名为“CHICOPEE”的城市。忽略大小写
  db.zips.remove({ "city": { "$regex": /chicopee/i }})
Enter fullscreen mode Exit fullscreen mode
  • 更新操作

    • 将“BLANDFORD”城市人口设置为 10
  db.zips.updateOne({"city": "BLANDFORD"}, { "$set": { "pop": 10}})
Enter fullscreen mode Exit fullscreen mode

结论

这是 MongoDB 入门的快速入门介绍。在本指南中,我们学习了 4 种托管 MongoDB 实例的方法。我们还学习了 5 种可用于管理 MongoDB 数据库的工具。最后,我们探索了一些可用于创建数据库、创建集合、插入数据、更新数据和获取数据的基本查询。

MongoDB 是一个令人兴奋的、相对较新的数据库,拥有庞大的社区和知识库。我鼓励所有感兴趣的人尝试以下学习资源来参与其中:

以下这本 MongoDB 书籍是我个人最喜欢的:

如果您对认证感兴趣,请参阅MongoDB 专业
认证计划


鏂囩珷鏉ユ簮锛�https://dev.to/drminnaar/mongodb-guide---getting-started--22nk
PREV
在 Windows 中配置超级终端
NEXT
使用 Pulumi 在 AWS 上安全快速地部署静态网站 使用 Pulumi 在 AWS 上安全快速地部署静态网站