04-Express+MongoDB数据库

参考:
- Express 官网:https://www.expressjs.com.cn/
- MongoDB 官网下载链接:https://www.mongodb.com/
- 验证项目demo:https://github.com/janycode/nodejs-express-mongodb
1. 关系型与非关系型数据库
关系型数据库
- 表与表之间可以建立关联关系
- sql语句增删改查操作
- 保持事务的一致性、事务机制(回滚):mysql、oracle、sqlserver、db2
非关系型数据库
- no sql,库表之间没有关联关系,not only sql
- 轻量、高效、自由(每行数据字段可以不一致):mongodb、redis、hbase
为什么喜欢 mongodb?
由于mongodb独特的数据处理方式,可以将
热点数据加载到内存,因此会非常快(当然也会非常消耗内存)。同时由于采用了
BSON(二进制的JSON)的方式存储数据,故对JSON格式数据非常友好,以及友好的表结构修改性。文档式的存储方式,数据友好可见。数据库的
分片集群负载具有非常好的扩展性,以及非常不错的自动故障转移。
| SQL术语 | MongoDB术语 | 说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection |
数据库表/集合 |
| row | document |
数据记录行/文档 |
| column | field |
数据字段/域 |
| index | index | 索引 |
| table joins | - | 表连接,mongodb不支持 |
| primary key | primary key | 主键,mongodb自动将 _id 字段设置为主键 |
2. MongoDB 安装
MongoDB 官网下载链接:https://www.mongodb.com/try/download/community
MongoDB 官网安装教程:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/
MongoDB 3.6.11版本,官网下载:(太旧)
绿色版(.zip):https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.6.11.zip
安装版(.msi):https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.6.11-signed.msi
MongoDB 5.0.32 版本,下载地址:(主流版本)
绿色版不需要安装,随用随启动即可。
3. MongoDB 启动
(1)windows
1 | |
eg: mongo 绿色版安装目录 D:\Java\mongodb, 在 D:\Java\mongodb\bin 下启动 powershell:
1 | |
(2)mac
1 | |
4. MongoDB 命令行操作



注意事项:
- use 创建数据库时,db 命令可以看到,但是 show dbs 命令看不到,是因为里面没有任何数据,有数据即可查询到。
基本命令
1 | |
find() 查询



1 | |
5. 可视化工具
使用 Navicat 或 Datagrip 或 Robomongo Robo3T adminMongo 均可。
Navicat 无版本兼容问题。
Datagrip 版本兼容验证,使用 mongodb 5.0.x 或 3.6.x 对应驱动版本
1.18:

6. Nodejs操作MongoDB
安装
安装:npm i mongoose@6
- 版本关联对应报错信息(node18.20+, mongodb3.6+):MongooseServerSelectionError: Server at 127.0.0.1:27017 reports maximum wire
version 6, but this version of the Node.js Driver requires at least 8 (MongoDB 4.2)
连接数据库
config/db.config.js - 添加数据库配置(独立维护在 config 目录)
1 | |
bin/www.js - 引入数据库
1 | |
model/UserModel.js - 添加数据模型(独立维护在 model 目录)
1 | |
views/users.ejs - 页面模板引擎-用户模块
1 | |
router/users.js - 路由接口逻辑
1 | |
CRUD
新增
页面
1 | |
接口
1 | |
更新
页面
1 | |
接口
1 | |
删除
页面
1 | |
接口
1 | |
列表
页面
1 | |
接口
1 | |
7. 规范与分层
接口规范
RESTful架构:url 地址中只包含名词表示资源,使用 http 动词表示动作进行操作资源。
示例:
1 | |
过滤信息:用于补充规范的一些通用手段
?limit=10指定返回记录的数量?offset=10指定返回记录的开始位置?page=2&pageSize=10指定第几页,以及每页的记录数量?sortby=name&order=asc指定返回结果按照哪个字段排序,以及排序顺序?state=close指定筛选条件
页面
1 | |
接口
1 | |
业务分层
- router.js 负责将请求分发给 Controller 层
- controller.js 负责处理业务逻辑(V与M之间的沟通)
- views/ V层,负责展示页面
- model/ M层,负责处理数据(增删改查)

示例(users.js 三层架构):
routes/users.js
1 | |
controllers/UserController.js
1 | |
services/UserService.js
1 | |