CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
MongoDB 入门/课时/安装与 mongosh
RawBlame
课时目录12 节

MongoDB 入门

  1. 01MongoDB 是什么
  2. 02安装与 mongosh
  3. 03文档与 BSON
  4. 04CRUD 操作
  5. 05查询与投影
  6. 06索引
  7. 07聚合管道
  8. 08Spring Data MongoDB
  9. 09何时用 Mongo vs SQL
  10. 10Docker 运行 MongoDB
  11. 11Node.js 驱动与 Mongoose
  12. 12综合练习

安装与 mongosh

Docker/本地安装、mongosh 连接、show dbs。

30 分钟

安装与 mongosh

这一课你将能做到

  1. 用 Docker 在本机启动 MongoDB 7 并用 mongosh 连上,说出 mongod 与 mongosh 的分工
  2. 执行 show dbs / use / db.runCommand({ ping: 1 }),确认 database → collection → document 三级结构
  3. 读懂连接字符串 mongodb://... 每一段的含义,为后续 Spring / Node 配置打底

为什么要学

文档概念再熟,不上手客户端就只是「听说过」。mongosh 是官方交互式 Shell:试命令、看报错、验证索引、跑聚合,都从这里开始——它之于 MongoDB,就像 mysql 客户端之于 MySQL。

开发环境推荐 Docker,理由与 MySQL 容器化相同:版本钉死、一键启停、不污染系统路径、团队环境一致。本课先跑通「能连上、能读写」;持久化与 compose 编排在 Docker 课展开。

人话:mongod 是服务端进程(真正存数据的),mongosh 是命令行客户端(你敲命令的地方)。两个都要有,缺一不可。

先建立图像

你的电脑
  ├─ mongosh(客户端,你敲命令)
  │     └─ 连接串 → host:27017 → 认证 → 选中库
  └─ mongod(服务端,常在 Docker 容器里)
        └─ database(coderoadmap_lab)
              └─ collection(lesson_logs …)
                    └─ document({ … })

连接字符串解剖:

mongodb://[username:password@]host[:port][/database][?options]
         └── 认证信息 ──┘└─ 地址 ─┘└ 默认库 ┘└ 认证库等选项

示例:
mongodb://admin:secret@127.0.0.1:27017/coderoadmap_lab?authSource=admin
MongoDBMySQL说明
databasedatabase逻辑隔离单元
collectiontable文档的容器
documentrow一条数据
fieldcolumn数据项
mongoshmysql CLI命令行客户端
270173306默认端口

跟着做

步骤 1:用 Docker 启动 MongoDB 7

本机已装 Docker 时执行:

docker run -d --name mongo-dev \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=secret \
  mongo:7

应看到:输出容器 ID;docker ps 里有 mongo-dev,端口列显示 0.0.0.0:27017->27017/tcp。 若 27017 被本机其他 mongod 占用,换 -p 27018:27017,之后所有连接串的端口一并改成 27018。

不装 Docker 也可走官方安装包:Windows 用 MSI 安装器(会注册成服务),macOS 用 。但团队协作强烈建议统一 Docker。

brew tap mongodb/brew && brew install mongodb-community@7.0

步骤 2:安装并确认 mongosh

  • 方式一:按官方文档安装 MongoDB Shell,mongosh --version 应打印版本号
  • 方式二:直接进容器里现成的 mongosh:
docker exec -it mongo-dev mongosh -u admin -p secret --authenticationDatabase admin

步骤 3:从宿主机连接并 ping

mongosh "mongodb://admin:secret@127.0.0.1:27017/?authSource=admin"

进入后提示符类似 test>,执行:

db.runCommand({ ping: 1 })   // 应返回 { ok: 1 }
db.getMongo()                // 查看当前连接信息

连不上时按顺序排查:容器是否在跑(docker ps)→ 端口是否映射 → 用户名密码是否与启动参数一致 → 是否漏了 authSource=admin。

步骤 4:database 与 collection 初体验

show dbs                    // 列出已有数据库(空库可能暂不显示)
use coderoadmap_lab         // 切换 / 预创建库;首次写入时才真正落盘
db.getCollectionNames()     // 当前库集合列表,此刻应为 []

// 插入一条冒烟数据,让库「现身」
db.smoke.insertOne({
  ok: true,
  note: "安装课冒烟测试",
  at: new Date()
})

show dbs                    // 应出现 coderoadmap_lab
show collections            // 应含 smoke
db.smoke.findOne()          // 应能看到刚插入的文档,含自动生成的 _id

应看到:插入后库与集合都可见;_id 是一串 ObjectId(...)——没写它,服务器自动生成。

步骤 5:对照 MySQL 习惯,写进笔记

若本机有 MySQL,开两个终端对照敲一遍:

SHOW DATABASES;              -- ≈ show dbs
USE codeforge;               -- ≈ use coderoadmap_lab
SHOW TABLES;                 -- ≈ show collections
SELECT * FROM cf_track LIMIT 1;  -- ≈ db.tracks.findOne()

注意:Mongo 练习固定用 coderoadmap_lab,绝不写进 MySQL 的 codeforge 生产库。

步骤 6:保存连接串模板

把下面这行写进本地笔记(不要提交密码到 git):

mongodb://admin:secret@127.0.0.1:27017/coderoadmap_lab?authSource=admin

后续 Spring 课与 Node 课会直接复用这段 URI。

讲清楚要点

  1. mongod 与 mongosh 是两端:「容器在跑」不等于「你已连上」,必须用 URI 或 docker exec 进入 shell 验证。
  2. 空库不会立刻出现在 show dbs:use 只是切换上下文,首次写入后库才真正创建——「刚 use 完找不到库」不是故障。
  3. 开了 root 用户就必须带认证:连接串漏 authSource=admin 或密码不对,报 Authentication failed。
  4. 默认端口 27017:与其他服务冲突时改宿主机映射端口,所有客户端 URI 同步改。
  5. 本课容器未挂载数据卷:删容器即丢数据,先用于连通练习;持久化方案在 Docker 课补齐。
  6. 本站主库是 MySQL:不要动 spring.datasource.url;Mongo 相关配置走 spring.data.mongodb.uri。

你可能会懵的地方

  • use xxx 成功了,show dbs 却没有 xxx? 尚未写入。插入任意一条文档后再 show dbs 就能看到——MongoDB 惰性创建库和集合。

  • 报 Authentication failed? 逐项检查:用户名密码与 MONGO_INITDB_ROOT_* 是否一致;是否带 ?authSource=admin(root 用户建在 admin 库里);用 docker exec 方式连可排除 URI 拼写问题。

  • 本机已装 MongoDB 服务,又起了 Docker,端口打架? 二选一停掉,或把 Docker 映射到 27018。netstat -ano | findstr 27017(Windows)可确认占用者。

  • mongosh 和旧版 mongo shell 什么关系? 旧 mongo shell 已废弃。所有文档与本 track 一律按 mongosh(基于 Node.js 的官方新 Shell)。

  • db 到底指什么? 当前 use 选中的数据库对象。db.smoke 是该库下名为 smoke 的集合,.insertOne() 才是操作。

错法对照

错法问题正解
docker run 完就以为装好了没验证连通性db.runCommand({ ping: 1 })
URI 漏 authSource=admin认证失败与 INITDB root 配套带上
练习写入 MySQL 业务库名污染真实数据Mongo 固定用 coderoadmap_lab
把 Mongo URI 填进 spring.datasource.urlBoot 按 MySQL 协议连接直接报错用 spring.data.mongodb.uri
27017 暴露公网且无密码数据任何人可读写本地绑定 + 认证;生产再加网络隔离

卡点急救

  1. 现象:MongoServerSelectionError: connection refused 容器没起或端口没映射。docker ps 确认 mongo-dev 状态 Up 且端口映射存在;不存在就 docker start mongo-dev 或重建。
  2. 现象:命令敲进去没反应或提示符不对 确认已在 mongosh 内(提示符是 test> 之类),bash 命令(docker、ls)要在 mongosh 外执行,反之亦然。
  3. 现象:show dbs 里找不到自己的库 库还没写入过。use 后随便 insertOne 一条再 show dbs。

面试常问

  • MongoDB 默认端口是多少?如何做认证? 默认 27017。认证方式:连接串带用户名密码 + authSource 指定凭据所在库(root 用户在 admin 库);生产环境还会启用 SCRAM 机制、最小权限角色(如 readWrite 只授业务库)与网络白名单。

  • mongod 和 mongosh 的区别? mongod 是服务端守护进程,负责存储引擎、索引、副本集选举;mongosh 是官方客户端 Shell,用 JavaScript 语法与服务端交互。一个在容器/服务里跑,一个在你终端里敲。

  • 连接字符串里 authSource=admin 是什么意思? 指定用哪个库验证这组凭据。MONGO_INITDB_ROOT_USERNAME 创建的 root 用户属于 admin 库;若业务用户建在业务库里则 authSource 应写业务库名。写错会认证失败。

自测三问

  1. database / collection / document 各对应 MySQL 的什么概念?
  2. 为什么 use lab 之后立刻 show dbs 可能看不到 lab?
  3. 连接字符串由哪几段组成?authSource 的作用是什么?

小结一句话

mongosh 连上 mongod 后,用 use 选库、对 db.集合 做读写;database → collection → document 三级结构是之后所有课的地基。

延伸

  • MongoDB 安装文档
  • mongosh 官方文档
  • 下一课:文档与 BSON——看懂数据到底长什么样。
加载本节练习…
← 上一课MongoDB 是什么下一课 →文档与 BSON