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 上发布的以下问题可能是一个很好的起点:
从我个人的经验和角度来看,如果你的数据需要不可知性,那么在选择 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
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
CLI 命令 | 描述 |
---|---|
--rm | 停止时移除容器 |
--name mongo-dev | 给容器一个自定义名称 |
-p | 将容器发布端口映射到本地端口 |
-v ~/mongodb/数据/db/数据/db | 将容器卷“data/db”映射到绑定挂载“~/mongodb/data/db” |
-d 蒙戈 | 在后台以守护进程的形式运行 mongo 容器 |
访问 MongoDB
从本地机器访问 MongoDB
- 输入以下命令来访问 docker 容器内托管的 MongoDB 实例:
mongo --host localhost --port 37017
通过 Docker Interactive TTY 访问 MongoDB
访问 MongoDB shell 有两个步骤。
- 首先,通过执行以下命令访问 MongoDB 容器 shell:
docker exec -it mongo-dev bash
这将在 MongoDB 容器上打开一个交互式 shell(bash)。
- 其次,进入容器 shell 后,通过执行以下命令访问 MongoDB shell:
mongo localhost
使用 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
- 列出可用数据库
show dbs
- 创建数据库
use message_db
- 创建收藏夹
db.messages.insert({ message: 'hello mongodb' })
- 列表集合
show collections
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官方网站。
Robo 3T
Robo 3T是一款免费的 GUI 工具,可用于探索您的 MongoDB 数据库。
- 可免费使用。
- 它是跨平台的,适用于 Linux、Windows 和 Mac
- 它提供了带有嵌入式 shell 的 MongoDB GUI
在下面的屏幕截图中,我使用 Robo 3T 连接到 MongoDB 的本地实例:
欲了解更多信息,请点击这里。
Visual Studio 代码
使用Azure CosmosDB 扩展,除了Azure CosmosDB数据库之外,还可以连接到 MongoDB 数据库。
有关详细信息,请参阅以下链接:
安装 Azure CosmosDB 扩展
- 启动 VS Code
ctrl+P
从 VS Code 内部启动“快速打开”( )- 粘贴以下命令并按 Enter
ext install ms-vscode.vscode-azureextensionpack
配置用户设置
安装扩展程序后,您需要确保在用户设置中配置了 Mongo 的路径。点击Ctrl+,
打开用户设置。由于我使用的是 Linux 操作系统,因此需要在用户设置 json 文件中添加以下设置:
"mongo.shell.path": "/var/lib/mongodb",
在 localhost 上连接到 Mongo
要连接到 MongoDB 实例,请按照以下步骤操作:
- 展开位于资源管理器中的Azure Cosmos DB扩展面板
- 选择“附加数据库帐户”选项
- 选择 MongoDB
- 输入 MongoDB 实例的连接详细信息
mongodb://localhost:27017
步骤如下:

使用 Mongo ScrapBooks 运行命令
要使用“剪贴簿功能”,请按照以下步骤操作:
- 按照上面所示连接到你的 MongoDB 实例
- 连接到您选择的数据库
- 选择“New MongoDB ScrapBook”选项打开剪贴簿编辑器
- 输入 MongoDB 命令
- 按下
Ctrl+Shft+'
执行
步骤如下:

在撰写本文时, Mongo ScrapBooks似乎存在问题
基本 MongoDB 命令
MongoDB 实例运行或托管后,打开 Mongoshell 连接到 MongoDB 服务器。为了演示,我将使用本地安装的“localhost”。
- 连接到 MongoDB 实例
mongo localhost
- 创建“zips_db”数据库
use zips_db
- 创建“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" }
])
-
搜索查询
- 获取集合总数
db.zips.count()
- 获取所有 zip 文件
db.zips.find().pretty()
- 获取 5 个 zip 文件
db.zips.find().limit(5).pretty()
- 获取城市名称为“BLANDFORD”的邮政编码
db.zips.find({"city": "BLANDFORD"})
- 获取城市名称为“BLANDFORD”的邮政编码,忽略大小写
db.zips.find({"city": { "$regex": /blandford/i } })
- 获取城市名称为“BLANDFORD”和“BRIMFIELD”的邮政编码
db.zips.find({"city": { "$in": ["BLANDFORD", "BRIMFIELD"] } }).pretty()
- 获取城市名称为“BLANDFORD”和“BRIMFIELD”的邮政编码,忽略大小写
db.zips.find({"city": { "$in": [ /blandford/i, /brimfield/i] } }).pretty ()
- 获取人口大于或等于 30000 的 zip 文档
db.zips.find({"pop": { "$gte": 30000}}).pretty()
- 获取所有 zip 文件并使用投影仅显示城市和人口
db.zips.find({}, { "city": 1, "pop": 1, "_id": 0 })
- 获取所有 zip 文件,并使用投影仅显示城市和人口。按城市名称降序排列文档
db.zips.find({}, { "city": 1, "pop": 1, "_id": 0 }).sort({"city": -1})
-
删除操作
- 删除所有名为“CHICOPEE”的城市。忽略大小写
db.zips.remove({ "city": { "$regex": /chicopee/i }})
-
更新操作
- 将“BLANDFORD”城市人口设置为 10
db.zips.updateOne({"city": "BLANDFORD"}, { "$set": { "pop": 10}})
结论
这是 MongoDB 入门的快速入门介绍。在本指南中,我们学习了 4 种托管 MongoDB 实例的方法。我们还学习了 5 种可用于管理 MongoDB 数据库的工具。最后,我们探索了一些可用于创建数据库、创建集合、插入数据、更新数据和获取数据的基本查询。
MongoDB 是一个令人兴奋的、相对较新的数据库,拥有庞大的社区和知识库。我鼓励所有感兴趣的人尝试以下学习资源来参与其中:
- MongoDB 文档- MongoDB 官方文档
- MongoDB 大学- MongoDB 提供的免费 MongoDB 在线课程
以下这本 MongoDB 书籍是我个人最喜欢的:
如果您对认证感兴趣,请参阅MongoDB 专业
认证计划。
鏂囩珷鏉ユ簮锛�https://dev.to/drminnaar/mongodb-guide---getting-started--22nk