前言
这是 MongoDB 专栏的第一篇。工欲善其事,必先利其器——在讲文档模型、索引、事务这些硬核内容之前,我们得先把环境搭起来。
本文覆盖三种主流安装方式:Windows、Linux(Ubuntu)、Docker,你按自己的需求选一种即可。文末还会给出安装过程中最常见的几个坑,以及一个新手最容易忽略但生产环境必须做的动作——开启认证。
本文以当前主流的MongoDB 7.x 社区版(Community Server)为例。
一、先认识 MongoDB 的几个核心组件
很多人装完 MongoDB,都不清楚自己到底装了些什么。先花一分钟扫清概念,后面就不会迷糊。
| 组件 | 作用 | 说明 |
|---|---|---|
mongod | 数据库服务进程 | 真正干活的服务端,数据存储、查询都靠它 |
mongosh | 命令行客户端 | 新一代 Shell,用来连接和操作数据库 |
MongoDB Compass | 图形化管理工具 | 官方 GUI,可视化查看数据、执行查询 |
MongoDB Database Tools | 命令行工具集 | 包含 mongodump / mongorestore / mongoimport 等,用于导入导出、备份恢复 |
这里有个新手必踩的坑要先点出来:
老版本的命令行客户端叫
mongo,从 MongoDB 6.0 开始已经被废弃,取而代之的是mongosh。如果你在网上看到教程里敲mongo连不上,不是装错了,是那个教程过时了——改敲mongosh即可。
二、Windows 下安装
2.1 下载安装包
访问官网下载页:https://www.mongodb.com/try/download/community
选择:
- Version:7.0(或当前最新的稳定版)
- Platform:Windows
- Package:msi
如上图,三个下拉框按红框选好,点击右侧 Download,下载得到一个.msi安装包。
2.2 图形化安装
双击 msi 安装包,进入安装向导。第一步是欢迎页,直接点 Next:
第二步是许可协议,勾选同意后 Next:
第三步:选择安装类型,选Complete(完整安装):
留意这个界面上的一句提示:“The Mongo Shell must be installed separately”——从新版本开始,命令行客户端
mongosh需要单独安装,这里装的主要是服务端。后面第五节连接时我们会再处理 mongosh。
第四步:服务配置(最关键的一步)。勾选“Install MongoD as a Service”,让 MongoDB 作为 Windows 服务运行:
这一步要注意几个信息:
- Run service as Network Service user:默认即可,用系统内置账户运行服务
- Data Directory / Log Directory:数据目录和日志目录。我这里装在了 D 盘
D:\develop_tools\MongoDB\Server\7.0\下,你可以按自己的磁盘规划调整,记下这两个路径,后面排查问题会用到
安装为服务的好处是:开机自动启动,不用每次手动开。
第五步:是否安装 Compass。建议勾选,会一并装上官方图形化工具:
最后一步:确认信息,点击 Install 开始安装:
2.3 配置环境变量
安装完成后,mongod默认不在系统 PATH 里,需要手动加进去,否则在任意目录敲命令会提示"不是内部或外部命令"。
把 MongoDB 的bin目录加到系统环境变量Path中(路径按你实际的安装位置填,我这里是 D 盘):
D:\develop_tools\MongoDB\Server\7.0\bin在"编辑系统变量"窗口里新增这一行即可:
注意:前面 Complete 界面已经提示过,新版本的
mongosh需要单独安装。如果 bin 目录下没有mongosh.exe,去官网下载 mongosh 独立安装包(https://www.mongodb.com/try/download/shell),解压后把它的 bin 目录也加进 Path。
2.4 验证服务
打开 CMD 或 PowerShell,检查服务状态:
# 启动服务(如果没自动启动)net start MongoDB# 停止服务net stop MongoDB也可以按Win + R输入services.msc打开服务管理器,找到MongoDB Server服务,确认状态为"正在运行":
看到状态是"正在运行",就说明服务端已经正常跑起来了。
2.5 单独安装 mongosh(命令行客户端)
这一步很多人会栽跟头。装完上面的 MongoDB Server 后,兴冲冲打开 CMD 敲mongosh,结果报错:
'mongosh' 不是内部或外部命令,也不是可运行的程序或批处理文件。原因前面已经埋过伏笔:从新版本开始,mongosh不再随 MongoDB Server 一起安装,需要单独下载。报这个错不是你装坏了,而是压根还没装 mongosh,或者装了但没配 PATH。按下面三步解决。
第一步:先确认到底装没装
打开你的 Server 安装目录下的bin(我这里是D:\develop_tools\MongoDB\Server\7.0\bin),看里面有没有mongosh.exe:
- 有 → 跳到第三步配 PATH
- 没有 → 继续第二步单独下载
第二步:下载并解压 mongosh
访问 mongosh 官方下载页:https://www.mongodb.com/try/download/shell
选择 Platform 为Windows x64、Package 为zip,下载后解压到一个固定目录,例如:
D:\develop_tools\mongosh解压后,mongosh.exe就在它的bin目录下(如D:\develop_tools\mongosh\bin)。
第三步:把 mongosh 的 bin 目录加进 PATH
和 2.3 配环境变量的操作一样,在系统变量Path里新增 mongosh 所在的 bin 目录:
D:\develop_tools\mongosh\bin如果第一步发现 Server 的 bin 里本来就有
mongosh.exe,那你 2.3 已经把这个 bin 加进 PATH 了,无需重复添加。
第四步:重开终端验证
改完环境变量后,务必关掉当前 CMD / PowerShell 再重新打开(旧窗口不会加载新的 PATH,这是最容易忽略的一点)。然后验证:
mongosh--version能打印出版本号,就说明 mongosh 装好了,可以进入第五节做连接验证。
三、Linux(Ubuntu)下安装
Linux 下推荐用官方的 apt 源安装,方便后续升级和管理。以 Ubuntu 22.04 为例。
3.1 导入公钥并添加官方源
# 导入 MongoDB 官方 GPG 公钥curl-fsSLhttps://pgp.mongodb.com/server-7.0.asc|\sudogpg-o/usr/share/keyrings/mongodb-server-7.0.gpg--dearmor# 添加 MongoDB 官方 apt 源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"|\sudotee/etc/apt/sources.list.d/mongodb-org-7.0.list
jammy是 Ubuntu 22.04 的代号。如果你用的是 20.04(focal)或 24.04(noble),把这里替换成对应代号。
3.2 安装
sudoaptupdatesudoaptinstall-ymongodb-org安装完成后,几个关键路径需要记住:
| 路径 | 用途 |
|---|---|
/var/lib/mongodb | 数据存储目录 |
/var/log/mongodb/mongod.log | 日志文件 |
/etc/mongod.conf | 配置文件(改端口、绑定 IP、开认证都在这里) |
3.3 启动与开机自启
# 启动sudosystemctl start mongod# 查看状态sudosystemctl status mongod# 设置开机自启sudosystemctlenablemongod# 停止 / 重启sudosystemctl stop mongodsudosystemctl restart mongod3.4 验证
mongosh能进入>提示符就说明服务正常。
四、Docker 方式安装(推荐开发环境)
如果你只是想本地开发、学习,或者需要在同一台机器跑多个版本,强烈推荐用 Docker。理由很简单:干净、隔离、随起随删,不污染宿主机环境,学完直接删容器,一点垃圾都不留。
前提是你已经装好了 Docker。
4.1 快速启动一个容器
dockerrun-d\--namemongodb\-p27017:27017\-vmongodb_data:/data/db\-eMONGO_INITDB_ROOT_USERNAME=admin\-eMONGO_INITDB_ROOT_PASSWORD=123456\mongo:7.0参数说明:
| 参数 | 含义 |
|---|---|
-d | 后台运行 |
--name mongodb | 容器命名,方便后续管理 |
-p 27017:27017 | 端口映射(宿主机:容器) |
-v mongodb_data:/data/db | 数据卷持久化,容器删了数据还在 |
-e MONGO_INITDB_ROOT_USERNAME/PASSWORD | 初始化 root 账号密码 |
-v挂载数据卷是新手最容易漏的一步。如果不挂,容器一删数据全没。
4.2 用 docker-compose 管理(更推荐)
命令行参数多了容易记错,用 compose 文件管理更清晰。新建docker-compose.yml:
version:"3.8"services:mongodb:image:mongo:7.0container_name:mongodbrestart:unless-stoppedports:-"27017:27017"environment:MONGO_INITDB_ROOT_USERNAME:adminMONGO_INITDB_ROOT_PASSWORD:"123456"volumes:-mongodb_data:/data/dbvolumes:mongodb_data:启动 / 停止:
dockercompose up-d# 启动dockercompose down# 停止并移除容器(数据卷保留)dockercompose logs-f# 查看日志4.3 进入容器验证
# 进入容器内的 mongosh,用刚才设置的账号连接dockerexec-itmongodb mongosh-uadmin-p123456五、连接与验证
环境装好了,接下来要验证能不能正常读写。我们完整走一遍闭环:连接数据库 → 新建数据库 → 新建文档 → 查出第一条。
这一节给两条路线,你选一条即可,也可以两条都体验一下:
- 5.1 Compass 图形化:全程点点点,对新手最友好,直观看到"库 → 集合 → 文档"的层级
- 5.2 mongosh 命令行:敲命令,是后续所有篇章的主力方式,建议一定要熟悉
5.1 用 Compass 图形化走一遍
第一步:连接数据库。
打开 Compass,新建连接,在连接字符串框里填本地实例地址:
mongodb://localhost:27017点击 Connect(Save & Connect),连接成功后左侧就能看到已有的数据库列表。
第二步:新建数据库。
点左侧的“+”(Create Database)按钮,在弹窗里填数据库名和第一个集合名——MongoDB 里建库时必须同时建一个集合。这里数据库填test,集合填users:
这也印证了前面说的:MongoDB 的数据库不能"空建",必须带一个集合才能落地。
第三步:新建文档。
进入test库的users集合,此时是空的。点“ADD DATA” → “Insert Document”:
在弹出的编辑框里,把默认内容改成我们要插入的文档(_id不用管,留空会自动生成):
{"name":"Tom","age":18,"city":"Beijing"}点 Insert 完成插入。集合里就出现了这条文档,可以看到 MongoDB 自动为它生成了一个_id(ObjectId 类型):
第四步:查出第一条文档。
在顶部的 Filter 过滤框里输入查询条件,查出刚插入的这条:
{name:"Tom"}点 Find,下方就精确返回了匹配的文档:
到这里,"连接 → 建库 → 建文档 → 查询"的完整闭环就跑通了。Compass 里这套点选操作,本质上和下面 mongosh 的命令是一一对应的。
5.2 用 mongosh 命令行走一遍
Compass 直观,但后续讲语法、聚合、索引时我们主要用 mongosh,因为它更快、更贴近真实开发。为了不和上面 Compass 建的test库混在一起,这次我们用命令行新建一个独立的库bookstore和集合books,把同样的流程再走一遍。
第一步:连接数据库。
打开 CMD / PowerShell,敲mongosh:
# 连接本地默认实例(等价于 mongodb://localhost:27017)mongosh# 也可以显式写完整连接串mongosh"mongodb://localhost:27017"# 如果开了认证(见第六节),需要带账号密码mongosh-uadmin-pyour_password--authenticationDatabaseadmin连接成功后,会打印出 MongoDB 版本、mongosh 版本等信息,并进入test>这样的提示符:
图里那句黄色的 “Access control is not enabled for the database” 就是在提醒你当前没开认证——本地学习无所谓,上生产必须处理,见第六节。
第二步:新建(切换)数据库。
// 切换到 bookstore 库,不存在也没关系,写入数据时会自动创建use bookstore切换后提示符会变成bookstore>:
第三步:新建文档。
// 向 books 集合插入一条文档;集合不存在会自动创建db.books.insertOne({title:"MongoDB 实战",author:"Tree",price:89,stock:120})执行后会返回acknowledged: true和自动生成的_id:
第四步:查出第一条文档。
// 按条件查询,等价于 Compass 里的 Filterdb.books.find({title:"MongoDB 实战"})能查出刚插入的那条文档,就说明整条链路完全通畅:
再用两个命令确认下库和集合都已经落地:
// 查看当前有哪些数据库(此时能看到 test 和 bookstore 两个库)show dbs// 查看当前库里有哪些集合show collections到这里环境就彻底验证通过了。此时show dbs会同时列出 Compass 建的test和命令行建的bookstore——两条路线各建各的,互不影响。
一个反直觉的点:
use bookstore之后如果不往里写数据,show dbs是看不到 bookstore 库的。MongoDB 里数据库和集合都是"懒创建"的——只有真正写入数据时才会落地。这也是为什么 Compass 建库时强制要你同时建一个集合。
六、开启认证:上生产前的第一道门
前面为了方便,本地可以裸奔(不开认证)。但这里必须严肃地提醒一句:
裸奔的 MongoDB 是重灾区。早年间大量 MongoDB 实例因为默认无认证、又把端口暴露在公网,被自动化脚本扫描后清空数据、留下勒索信。只要你的实例可能被外部访问,认证就不是可选项。
6.1 创建管理员用户
连接后切换到admin库创建用户:
use admin db.createUser({user:"admin",pwd:"your_strong_password",roles:[{role:"root",db:"admin"}]})用 Docker 的
MONGO_INITDB_ROOT_USERNAME/PASSWORD方式启动的,这一步容器已经帮你做了,可跳过。
6.2 开启认证
Linux:编辑/etc/mongod.conf,加上:
security:authorization:enabled然后重启:sudo systemctl restart mongod。
Windows:编辑安装目录下的mongod.cfg(按前面的安装路径,我这里是D:\develop_tools\MongoDB\Server\7.0\bin\mongod.cfg),同样加上上面那段security配置,再到服务管理器重启 MongoDB Server 服务。
6.3 带认证连接
开启后,再想操作就必须带上账号密码了:
mongosh-uadmin-pyour_strong_password--authenticationDatabaseadmin七、常见安装问题排查
延续本专栏"踩坑"的传统,把最高频的几个问题列成 FAQ。
1. 端口 27017 被占用
启动失败,日志里出现Address already in use。查一下谁占了:
# Linux / macOSlsof-i:27017# Windowsnetstat-ano|findstr27017要么杀掉占用进程,要么改配置文件里的net.port换个端口。
2. 服务启动失败(数据目录问题)
常见于手动指定--dbpath启动时:
- 目录不存在 → MongoDB不会自动创建,需要手动
mkdir - 目录权限不足 → Linux 下确保数据目录属主是运行 mongod 的用户(通常是
mongodb)
3. mongosh 连不上
排查顺序:
- 服务到底起没起?(
systemctl status mongod/ 服务管理器) - 是不是连的地址/端口不对?
- 远程连不上?检查配置文件里的
net.bindIp——默认只绑127.0.0.1,只允许本机访问;要允许外部访问需改成0.0.0.0(但记得先开认证再对外开放)。 - 防火墙 / 云服务器安全组有没有放行 27017 端口?
4. 敲mongo提示命令找不到
前面说过了:新版已改名mongosh。
八、小结
三种安装方式怎么选,给你一张速查表:
| 场景 | 推荐方式 | 理由 |
|---|---|---|
| 本地长期开发、当主力环境 | Windows / Linux 原生安装 | 稳定,作为服务常驻 |
| 快速试验、学习、多版本共存 | Docker | 干净隔离,随起随删 |
| 团队协作、统一环境 | Docker Compose | 一份配置文件,人人环境一致 |
到这里,环境已经准备就绪。下一篇《MongoDB 基础语法与数据结构》,我们会从 BSON 数据类型讲起,带你把增删改查(CRUD)和常用查询操作符彻底搞明白,为后面的文档模型设计打好基础。