主题
MongoDB 数据库程序(服务)与使用工具操作数据库(Day12 1/3)
本页对应 Day12_Node&MongoDB,共 7 段视频,约 58 分钟。
学习目标
- 能够说明数据库在注册登录、商品展示、购物车和订单等场景中的作用,并区分关系型数据库与非关系型数据库。
- 能够完成 MongoDB 5.0 的 Windows 安装,识别安装目录、日志目录、数据目录及配置文件位置,并说明安装时不勾选 Compass 的原因。
- 能够将 MongoDB 的
bin目录配置到系统环境变量Path中,并通过命令行验证配置是否生效。 - 能够分别通过 Windows 服务和
mongod命令启动 MongoDB 服务,判断启动成功或失败,并说明命令行启动时数据目录和端口参数的作用。 - 能够使用
mongo客户端连接本机 MongoDB 服务,解释默认地址127.0.0.1与默认端口27017,并说明连接远程服务时需指定主机和端口。 - 能够解释 MongoDB 中数据库、集合、文档的层级关系,并将集合类比为数组、文档类比为对象,说明一个文档表示一条数据。
知识点
数据库为什么需要:从注册登录到购物车
为什么需要:任何程序只要涉及用户、商品、订单,就要把数据存下来;注册是在数据库里加一条用户记录,登录是按用户名取出密码比对,商品展示、搜索、购物车、订单状态也都离不开数据库。怎么想:先把“数据放在哪里、谁来读写”想清楚,再理解数据库就是一个按数据结构组织、存储和管理数据的仓库,本身也是需要安装的应用程序。怎么做:用京东、淘宝的流程反推——注册写入、登录查询、搜索按条件查询、加购写购物车、下单写订单;换手机登录后购物车和订单还在,说明数据存在服务端数据库而不是手机里。易错点:不要把“数据库”只理解成一张表;也不要把前端页面看到的数据当成数据源头,页面只是展示,真正持久化在后端数据库。
为什么选 MongoDB:不写 SQL 也能走后端流程
为什么需要:这一节的目标是走一遍后端开发流程,而不是花四五天专门学 SQL;关系型数据库如 MySQL、Oracle、DB2、SQL Server 都要用 SQL 操作,学习成本高。怎么想:MongoDB 属于非关系型数据库,操作命令对 JavaScript 友好,语法规范接近 JS,入门快;Redis 也常做缓存,但本课程选择 MongoDB 更合适。怎么做:先建立“数据库服务负责存数据,客户端负责连服务并操作数据”的模型;MongoDB 与关系型数据库可对应为:库对应库,集合对应表,文档对应记录。易错点:不要因为“非关系型”就以为它和关系型完全无关;它的库、集合、文档对应关系很清楚,常被称为接近半关系型。
安装 MongoDB:选稳定版本和完整安装
为什么需要:要操作数据库,先要在本机安装 MongoDB 服务。怎么想:转写稿建议用 5.0 稳定版,不追刚发布的 6 和内测 7;Windows 下载有 ZIP 免安装和 MSI 安装包,课程选安装包,避免自己配置启动。怎么做:双击安装,同意协议;选择 Complete 完整安装;服务选项保持默认,暂不配置用户名密码;日志目录和数据目录可改但课程不改;关键是不勾选 Compass 图形工具,因为它会在线下载,服务器在国外可能很慢。易错点:勾选 Compass 可能长时间卡住;安装路径默认在 C:\Program Files\MongoDB\Server\5.0,数据默认在其中的 data 目录,不要误以为数据存在程序安装目录本身。
配置环境变量:让 mongod、mongo 能全局使用
为什么需要:命令行执行命令时,先在当前目录找,找不到再去环境变量 Path 配置的目录里找;不配置就无法全局使用 MongoDB 命令。怎么想:MongoDB 的可执行文件在安装目录的 bin 下,因此要把 bin 路径加入 Path,而不是只写到 5.0。怎么做:此电脑→属性→高级系统设置→环境变量→找到 Path→新建→粘贴 bin 目录→一路确定。易错点:路径结尾必须是 bin;配置错时常见报错是“不是内部或外部命令”。配置完要重新打开命令行验证。
启动服务:Windows 服务与命令行两种方式
为什么需要:安装完只是有程序,必须启动 MongoDB 服务,客户端才能连接。怎么想:MongoDB 是给开发人员用的专业服务,不一定有桌面客户端;Windows 可用图形化“服务”管理,命令行方式更通用。怎么做:方式一,此电脑→管理→服务和应用程序→服务→找 MongoDB Server,可启动/停止,启动类型可设自动;方式二,命令行执行:
bash
mongod如果直接执行后命令结束,说明启动失败;若一直挂起,说明服务启动成功。也可指定数据目录和端口:
bash
mongod --dbpath <数据目录> --port <端口号>易错点:命令行启动默认数据目录是“当前命令行所在盘符下的 data\db”,且必须提前创建;否则启动失败。命令行启动后不能关窗口,关掉或按 Ctrl+C 服务就停止;Windows 服务启动不了时可用命令行方式。
客户端工具:先连接服务,再操作数据
为什么需要:服务本身不能直接操作,需要数据库客户端连接服务后管理数据;客户端是相对于 MongoDB 服务而言的,不是互联网语境里的客户端。怎么想:就像电视和遥控器,遥控器先连接电视,之后操作才作用到电视;客户端可和服务装在同一台电脑,也可装在其他电脑,只要指定 IP 和端口。怎么做:MongoDB 自带命令行客户端 mongo;先确保服务已启动,再执行:
bash
mongo本机默认连接 127.0.0.1:27017。连接其他机器可用:
bash
mongo --host <IP> --port <端口> <数据库名>易错点:服务没启动时客户端连不上;本机连接可省略地址端口,远程连接不能省略。课程安装时未设账号密码,但默认限制本机访问,不要误以为可以随意远程连。
数据库、集合、文档:三层管理模型
为什么需要:操作前要明确 MongoDB 如何组织数据。怎么想:一个 MongoDB 服务可创建多个数据库;一个数据库可创建多个集合;一个集合可包含多个文档;文档是最小单位,类似 JS 对象,表示一条数据。怎么做:一个项目通常一个数据库就够,例如商城库中放用户集合、商品集合;用户集合中的每个文档表示一个用户,商品集合中的每个文档表示一个商品。集合类似 JS 数组,文档类似数组中的对象。易错点:不要把集合和文档混为一谈;日常增删改查最频繁的是文档,数据库和集合通常设计好后较少变动。
先明确:本节要建立“服务—客户端—数据层级”的整体图
本节笔记只给了标题“1 MongoDB 数据库程序(服务)”,没有附图片和代码;下面的命令来自转写稿中的课堂演示,不额外编造。
为什么需要: 学 MongoDB 不能一上来只记命令,否则就是“照步骤点手机”。要先知道它是数据库程序,本质是存数据、管数据的服务。注册用户是在数据库里加记录,登录是根据用户名找密码比对;商品展示、搜索、购物车、订单也都对应数据库操作。
怎么想: 把 MongoDB 看成一个“服务程序”:先安装、再启动服务,然后用客户端连接它,连接后才能操作数据库、集合、文档。服务本身不直接给你点,需要“遥控器”式的客户端。
怎么做: 先理解数据库种类:MySQL、Oracle、DB2、SQL Server 是关系型数据库;MongoDB、Redis 是非关系型数据库。课程选 MongoDB,是因为它不需要先学 SQL,操作语法对 JavaScript 友好,同时结构又接近关系型数据库。
易错点: 不要把“数据库客户端”理解成互联网里的客户端;这里的客户端是相对于 MongoDB 服务而言的工具。也不要把 MongoDB 当成只能存“很大数据”的东西,它首先就是数据库服务。
安装 MongoDB:选稳定版本,注意 Compass 不要勾选
为什么需要: 只有安装并启动服务,后面的连接和增删改查才有对象。安装选项选错,常见后果是卡在在线下载或目录不清楚。
怎么想: 课程选 5.0 稳定版,不追刚发布的 6 和内测的 7。Windows 下 ZIP 是免安装压缩包,MSI 是安装包;课堂用安装包,减少手工配置。
怎么做: 安装时选 Complete 完整安装;服务作为 Windows 服务安装;用户名密码暂不配置;日志目录和数据目录先保持默认。走到 Compass 图形化工具那一步不要勾选,因为它会在线下载,服务器在国外可能很慢。Compass 后续可单独安装。
易错点: 不要勾选在线下载 Compass;不要擅自改默认目录,否则后面找 bin、data、配置文件会乱。安装完成后默认目录通常在 C:\Program Files\MongoDB\Server\5.0,其中 bin 下有可执行文件,data 是数据目录。
配置环境变量:让 mongod、mongo 能全局使用
为什么需要: 命令行执行命令时,先在当前目录找;找不到再去环境变量 Path 配置的目录里找。不配置 bin,就会报“不是内部或外部命令”。
怎么想: 环境变量不是 MongoDB 专属,Node、Python 等工具都可能要配。关键不是背点击步骤,而是理解“把命令所在目录告诉系统”。
怎么做: 找到 MongoDB 的 bin 目录并复制路径;此电脑→属性→高级系统设置→环境变量→找到 Path→新建→粘贴路径→一路确定。路径要精确到 bin,不是到 5.0。
易错点: 最常见的错误是只配到版本目录,导致 mongod 仍不可用。配置后要重新打开命令行窗口再试。
启动服务:Windows 服务与 mongod 命令行两种方式
为什么需要: 安装不等于运行。MongoDB 是给开发人员用的服务程序,不会在桌面生成一个“MongoDB 图标”让你双击聊天式使用。
怎么想: 方式一用 Windows 服务管理,图形化、开机可自动启动;方式二用命令行 mongod,更通用,Linux、macOS、服务器上通常也靠命令行。课堂建议 Windows 服务能正常启动就用方式一;启动不了再用命令行。
怎么做: 方式一:此电脑→管理→服务和应用程序→服务→找 MongoDB Server,可启动、停止,启动类型可设自动或手动。方式二:打开命令行执行 mongod;若默认数据目录不存在会启动失败,需要先创建命令行所在盘符下的 data\db,也可用参数指定:
bash
mongod --dbpath D:\data\db
mongod --dbpath D:\data\db --port 27017易错点: mongod 是服务端程序,mongo 是客户端命令行;两者不要混。命令行启动成功后窗口会挂起,不是“卡死”;关掉窗口或按 Ctrl+C,服务就停止。命令行启动时要提前创建数据目录。
客户端连接:先连服务,再操作数据
为什么需要: 服务负责存数据,但你不能直接“操作服务本身”,需要客户端连接它。就像电视是服务,遥控器是客户端,先匹配连接,再操作。
怎么想: 客户端可以和服务在同一台电脑,也可以在不同电脑;跨电脑连接要指定 IP 和端口。课堂环境默认只允许本机访问,且安装时没设账号密码,所以本机连接不用输用户名密码。
怎么做: 服务启动后,在命令行执行:
bash
mongo默认连接本机 127.0.0.1:27017。跨机器时可使用 --host、--port 和数据库名,例如转写稿提到的形式:
bash
mongo --host 目标IP --port 27017 数据库名易错点: 服务没启动,客户端连不上;端口不是默认 27017 时要显式指定。不要因为“没设密码”就以为公网可随便连,课堂演示默认限制本机访问。
数据库、集合、文档:三层结构要能对应起来
为什么需要: 后面所有 CRUD 操作都落在这三层上。不理解层级,就会把数据库、集合、文档混着叫。
怎么想: 一个 MongoDB 服务可创建多个数据库;一个数据库可创建多个集合;一个集合可包含多个文档。集合类似 JavaScript 数组,文档类似对象/JSON,表示一条数据。关系型数据库的“库—表—记录”可以类比成 MongoDB 的“库—集合—文档”。
怎么做: 一个项目通常一个数据库就够;用户、商品、订单分别建集合;每个集合里放多条文档。例如商品集合中,一个文档表示一个商品,包含名称、价格、库存等字段。
易错点: 不要把一个项目拆成一堆数据库;通常是一个数据库下多个集合。文档是集合里的最小数据单位,增删改查主要发生在文档层,这也是后端常说的 CRUD 工作。
数据库到底解决什么问题
为什么需要:程序里的用户、商品、购物车、订单、订单状态都要长期保存,还要能被查询和修改。注册是在数据库里加一条用户记录,登录是根据用户名取出密码比对;商品展示、搜索、加购、下单,本质都是数据库操作。
怎么想:把数据库理解成“按一定结构组织、存储和管理数据的仓库”,它本身也是应用程序,需要安装、启动,再由客户端连接操作。
怎么做:本节不先深挖所有数据库类型,只明确:关系型数据库常见有 MySQL、Oracle、DB2、SQL Server;非关系型常见 MongoDB、Redis。课程选 MongoDB,是因为它不需要先学 SQL,命令和 JavaScript 语法接近,便于走一遍后端开发流程。
易错点:不要把“数据库服务”和“数据库客户端”混为一谈;也不要把 MongoDB 当成完全不用理解结构的“黑盒”,它仍有库、集合、文档的层级。
安装 MongoDB:选稳定版和安装包
为什么需要:要操作数据库,先要有可运行的服务。转写稿中课程选择 5.0,理由是 6 刚发布、7 还在内测,开发时优先稳定版本。
怎么想:Windows 下载有 ZIP 和 MSI 两种。ZIP 是免安装压缩包,要自己放位置、自己启动;MSI 是安装程序,更适合本节跟着操作。
怎么做:双击 MSI,同意协议后选择 Complete 完整安装;服务相关选项保持默认;安装过程中不要勾选 Compass。
易错点:勾选 Compass 会在线下载,服务器在国外,可能非常慢,甚至当天装不完。Compass 可后续单独安装,不要在这一步硬等。
配置环境变量:让命令全局可用
为什么需要:安装目录 bin 下有 mongod、mongo 等可执行文件。如果不把 bin 加入 Path,命令行在别的目录执行时会找不到命令。
怎么想:环境变量的意义是:命令先在当前目录找,找不到再到 Path 配置的目录里逐个找;都找不到才报“不是内部或外部命令”。
怎么做:找到安装目录下的 bin,复制完整路径;打开“此电脑 → 属性 → 高级系统设置 → 环境变量”,在 Path 中新建并粘贴,连续点确定。
易错点:Path 必须配置到 bin,不能只配置到版本号目录;配置完要重新打开命令行验证。以后装 Node、Python 等工具,思路相同。
启动服务:Windows 服务与命令行两种方式
为什么需要:MongoDB 安装后是服务程序,不启动就不能提供数据服务。
怎么想:方式一是 Windows 服务图形化管理:此电脑 → 管理 → 服务和应用程序 → 服务 → 找到 MongoDB Server,可启动、停止,启动类型可设自动。方式二是命令行启动,更通用,Linux、macOS 和服务器环境通常没有图形界面。
怎么做:命令行可执行:
bash
mongod但直接执行可能启动失败,因为命令行启动的默认数据目录是“命令行所在盘符下的 data\db”,且目录要提前创建。创建后可成功启动;也可指定目录和端口:
bash
mongod --dbpath 你的数据目录
mongod --dbpath 你的数据目录 --port 27017易错点:命令行启动成功后命令会挂起,这是正常现象;如果命令立刻结束,通常说明启动失败。命令行窗口不能关,关了服务就停止。Windows 服务启动不了时,可改用命令行方式,并提前创建数据目录。
客户端连接:用 mongo 操作服务
为什么需要:服务负责存数据,但不能直接“对着服务文件”操作,需要客户端连接后管理数据。客户端可以是命令行,也可以是图形化 GUI 工具。
怎么想:客户端是相对 MongoDB 服务而言的,像遥控器对电视:先连接,再操作。客户端和服务可在同一台电脑,也可在不同电脑;跨电脑要指定 IP 和端口。
怎么做:本机服务默认端口 27017,直接执行:
bash
mongo即可连接 127.0.0.1:27017。跨机器时需指定主机、端口和数据库;本节安装时未设置用户名密码,但默认限制本机访问。
易错点:没启动服务就连接会失败;不要误以为“没设密码就谁都能连”,转写稿明确说默认只允许本机访问。GUI 工具同样要先连接服务。
数据库、集合、文档的层级
为什么需要:后续增删改查要知道操作对象在哪一层。
怎么想:一个 MongoDB 服务可创建多个数据库;一个数据库可创建多个集合;一个集合可包含多个文档。文档是最小单位,类似 JavaScript 对象;集合类似数组。关系型数据库的“库、表、记录”可类比“库、集合、文档”。
怎么做:一个项目通常用一个数据库即可,例如商城库中放用户集合、商品集合、订单集合;每个文档表示一条用户或商品信息。实际开发中数据库和集合相对稳定,频繁增删改查的是文档。
易错点:不要把集合当表、文档当记录后完全照搬;MongoDB 虽接近关系型数据库,但不需要写 SQL,操作时仍要分清库、集合、文档三层。
(本节笔记未附图片和代码;以上命令均来自转写稿中提到的 mongod、mongo、--dbpath、--port 与默认端口 27017。)
课堂画面






代码示例
示例 1:用 JS 数组和对象理解「数据库 → 集合 → 文档」
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>数据库 / 集合 / 文档</title>
</head>
<body>
<h3>一个项目一个数据库:shop</h3>
<pre id="out"></pre>
<script>
// 集合 ≈ JS 数组
const goods = [
{ name: '手机', price: 3999, stock: 20 }, // 文档 ≈ JS 对象
{ name: '耳机', price: 199, stock: 100 }
];
const users = [
{ username: 'tom', password: '123456' } // 一条用户信息 = 一个文档
];
// 数据库 ≈ 装着多个集合的对象
const shop = { goods, users };
document.getElementById('out').textContent =
'集合名:' + Object.keys(shop).join('、') + '\n' +
'goods 集合中文档数量:' + shop.goods.length + '\n' +
'第 1 条商品文档:' + JSON.stringify(shop.goods[0]);
</script>
</body>
</html>要点解释:
goods是数组,对应 MongoDB 的「集合」;数组里的每个对象就是一条「文档」,对应一条商品信息。users是另一个集合,一个文档表示一个用户;同一个数据库里可以有多个集合,各管各的数据。shop这个对象相当于「数据库」,一个项目一般一个数据库就够,集合基本固定,频繁增删改查的是集合里的文档。- 易错点:文档是对象、集合是数组,别把两者搞反;文档是数据库里的最小单位,不是集合。
示例 2:对集合里的文档做增删改查(CURD)
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文档增删改查</title>
</head>
<body>
<pre id="log"></pre>
<script>
const goods = []; // 集合
const log = [];
// 增:往集合里添加文档
goods.push({ name: '手机', price: 3999, stock: 20 });
goods.push({ name: '耳机', price: 199, stock: 100 });
log.push('增之后共 ' + goods.length + ' 条文档');
// 查:按条件找出文档
const found = goods.find(item => item.name === '耳机');
log.push('查到的文档:' + JSON.stringify(found));
// 改:修改文档里的字段
found.price = 159;
log.push('改之后:' + JSON.stringify(found));
// 删:把文档从集合中移除
const index = goods.findIndex(item => item.name === '手机');
goods.splice(index, 1);
log.push('删之后:' + JSON.stringify(goods));
document.getElementById('log').textContent = log.join('\n');
</script>
</body>
</html>要点解释:
- 增用
push往集合(数组)里塞文档;查用find按条件匹配;删用findIndex定位后splice移除;改直接改文档对象的属性。 - 三个操作里「文档」是主角:增的是文档、删的是文档、改的是文档、查的也是文档,这就是后端 CURD 的主要工作。
- 易错点:
find返回的是集合里那个文档对象本身,改found.price就等于改了集合中的文档;如果find没匹配到会返回undefined,直接取属性会报错。
示例 3:启动 MongoDB 服务并连接(命令行)
bash
# 1) 用命令行启动服务(默认数据目录是「命令行所在盘符」下的 data\db,必须先建好)
# 以命令行在 D 盘为例,需提前创建 D:\data\db
mongod
# 2) 也可以自己指定数据目录和端口(目录同样要提前创建)
mongod --dbpath D:\data\db --port 27017
# 3) 用 MongoDB 自带的命令行客户端连接服务
# 服务和客户端在本机、端口是默认 27017,所以什么参数都不用加
mongo
# 4) 连接别的电脑上的服务时,才需要指定 IP 和端口
mongo --host 192.168.1.10 --port 27017要点解释:
mongod是服务端程序,mongo是自带的命令行客户端(遥控器),必须先连上服务才能操作数据。- 命令行启动时默认数据目录是当前命令行所在盘符下的
data\db,必须提前创建,否则启动失败;安装时图形化 Windows 服务用的数据目录是安装目录下的data,两者不是同一个目录。 - 启动成功后命令行会一直挂起不结束,这才叫启动成功;一旦关掉这个命令行窗口或按 Ctrl+C,服务就停了。用「Windows 服务」方式启动则不用一直开着命令行。
- 易错点:配置环境变量要配到
bin目录,配错位置会报「不是内部或外部命令」;服务和客户端在本机、端口默认时无需任何参数,只有跨机器连接才需要--host、--port。
常见错误
- 现象:命令行输入
mongo或mongod提示“不是内部或外部命令”→原因:MongoDB 的bin目录未加入环境变量,或加入后未重开终端→修法:把安装目录下的bin路径加入Path,一路确定后关闭并重新打开命令行再试。 - 现象:Windows 服务里 MongoDB 显示“已停止”,点启动也失败→原因:服务状态异常、权限或安装环境问题→修法:先尝试以管理员身份启动服务;仍失败则改用命令行方式启动,并提前准备数据目录。
- 现象:命令行执行
mongod后立即结束,没有保持挂起→原因:默认数据存储目录不存在,或未指定可用的--dbpath→修法:先创建数据目录,再启动;自定义目录时用--dbpath指向已存在目录。 - 现象:用命令行启动 MongoDB 后,一关终端数据库就不能用了→原因:命令行启动方式下,终端进程就是服务进程,终端关闭服务即停止→修法:开发时保持该终端不关;或改用 Windows 服务方式启动。
- 现象:
mongo客户端连接不上→原因:MongoDB 服务未启动、端口不对,或连接了非本机地址但未正确指定 host/port→修法:先确认服务正在运行,再检查默认127.0.0.1:27017;连接其他机器时显式指定 IP 和端口。 - 现象:安装时勾选 Compass 后安装卡很久→原因:该组件需在线下载,网络慢时耗时不可控→修法:安装时不勾选,先完成 MongoDB 服务安装;需要图形客户端时再单独安装。
练习
- 安装完 MongoDB 后,在任意目录打开命令行执行
mongod --version失败,请写出排查顺序和修复步骤。 - 用 Windows 服务方式启动 MongoDB 失败,改命令行启动时又提示数据目录相关错误,请给出完整处理思路。
- 启动 MongoDB 服务后,用
mongo连接成功;请说明如果要连接另一台电脑上的 MongoDB 服务,需要额外确认哪些信息。 - 命令行启动 MongoDB 后,终端被误关,客户端连接失败。请判断原因并给出两种可选处理方式。
- 安装时误勾选 Compass 导致长时间卡住,请说明应如何调整安装策略,以及安装完成后如何验证 MongoDB 服务是否可用。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 数据库介绍 | 07:15 |
| 2 | MongoDB安装 | 08:22 |
| 3 | 配置环境变量 | 07:16 |
| 4 | 启动MongoDB服务 | 13:28 |
| 5 | MongoDB客户端管理工具 | 12:39 |
| 6 | 使用mongo连接mongodb服务 | 03:49 |
| 7 | 数据库、集合、文档 | 05:28 |
小结
- 环境变量配置正确与否,直接决定
mongo、mongod能否在任意目录全局使用。 - Windows 服务方式和命令行方式都能启动 MongoDB,但要清楚两者在“终端是否必须保持打开”上的差异。
- 命令行启动前必须先保证数据存储目录存在,否则服务无法正常起来。
- 客户端工具的第一动作是连接服务;连接成功后再谈数据库、集合、文档操作。
- 本机默认连接地址是
127.0.0.1:27017,换机器连接时要显式关注 IP 与端口。 - 排错顺序应优先看服务状态、命令路径、数据目录和端口,不要一上来改配置。
- 安装阶段不要勾选需要在线下载的附加组件,避免网络问题拖垮安装流程。
- 命令行启动适合临时开发验证,长期使用更推荐稳定的服务管理方式。