1. 关系型与非关系型数据库
关系型数据库(RDBMS)和非关系型数据库(NoSQL)是两种不同类型的数据库管理系统。
关系型数据库是基于关系模型的数据库。它使用表(关系)来保存数据,并且通过事先定义的结构(表的列)和关系(表之间的关联)来组织数据。关系型数据库使用SQL(结构化查询语言)作为查询和操作数据的标准语言,例如常见的MySQL、Oracle、SQL Server等。
非关系型数据库则是一种灵活的数据存储方式,不使用表、行、列的结构。它们可以存储各种不同类型的数据,包括文档、键值对、列族等。非关系型数据库通常以键值对(例如Redis)或者文档(例如MongoDB)的形式储存数据。这些数据库的设计目标通常是在大规模数据的读写上提供高性能和可扩展性。
关系型数据库和非关系型数据库在以下几个方面有所区别:
- 数据结构:关系型数据库使用表格和SQL来存储和查询数据,而非关系型数据库使用各种不同的数据结构,如键值对、文档或者列族。
- 数据一致性:关系型数据库通常支持事务处理,保证数据的一致性和完整性,而非关系型数据库则更注重分布式、高性能的读写操作。
- 可扩展性:非关系型数据库通常更容易水平扩展,可以在需要时添加更多的服务器以满足系统的需求,而关系型数据库在扩展性方面相对不足。
- 数据库处理方式:关系型数据库采用结构化查询语言(SQL)进行操作和查询,而非关系型数据库更注重API的灵活性和数据的快速存取。
2. MongoDB 基本介绍
MongoDB是一种非关系型数据库,采用文档导向的数据存储方式,通过JSON-like的文档结构来存储数据。
以下是MongoDB的一些特点:
-
非关系型数据库:MongoDB使用集合(Collection)来存储和组织数据,集合类似于关系型数据库中的表,但没有固定的结构,不需要事先定义表结构即可存储数据。
-
文档导向:MongoDB使用文档(Document)来表示数据记录,文档是一个包含键值对的数据结构,类似于关系数据库中的行,但文档可以具有非常灵活的结构,因此非常适合存储半结构化和非结构化数据。
-
强大的查询语言:MongoDB提供灵活和强大的查询语言,支持基本的查询操作,包括条件过滤、排序、投影等,也支持复杂的聚合查询、文本搜索和地理空间查询等。
-
高性能和可扩展性:MongoDB被设计为高性能和可扩展的数据库,它采用的是基于内存的数据访问模式,具有快速的读写能力。此外,MongoDB还支持水平扩展,可以通过分片技术将数据分布到多个服务器上,以提高系统的吞吐量和负载能力。
-
自动故障恢复:MongoDB具备自动故障恢复的功能,它能够在节点崩溃或网络中断的情况下自动恢复,并保持数据的一致性。
-
灵活的数据复制和分发:MongoDB支持数据复制和分发,可以通过复制集(Replica Set)来提高数据的可用性和容错性,也可以通过分片技术来进行数据的水平划分和负载均衡。
总的来说,MongoDB是一种强大、灵活、高性能和可扩展的非关系型数据库,适用于需要灵活数据结构、高性能读写、复制和分发数据的场景。它广泛应用于互联网应用、大数据分析、实时数据处理等领域。
3. MongoDB 的使用
3.1 安装
安装地址
3.2 启动
在 mongod.exe 所在的 bin 文件夹内打开终端(将服务端开启并连接到某个 db 文件夹下):
.\mongod.exe --dbpath=D:\data\db
安装 mongosh ,执行 mongosh.exe 文件,连接到本地数据库端口,开启客户端。(当然也可以利用可视化工具连接)
3.3 操作
4. Node.js 连接操作 MongoDB
- 连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/xx_project')
- 创建模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserType = {username: String,password: String,age: Number
}const UserModel = mongoose.model('user', new Schema(UserType));
module.exports = UserModel;
- 增删改查
var express = require('express');
var router = express.Router();
const UserModel = require('../models/user');/* GET users listing. */
router.get('/', function (req, res, next) {res.send('respond with a resource');
});router.post('/user/add', (req, res) => {console.log(req.body)// 插入数据库// 1. 创建一个模型const { username, password, age } = req.body;UserModel.create({username,password,age}).then(data => {console.log(data)})res.send({ok: 1})
})router.post('/user/update/:id', (req, res) => {console.log(req.body, req.params.id)const { username, password, age } = req.body;UserModel.updateOne({ _id: req.params.id }, {username,password,age}).then(data => {res.send({ok: 1})})})
router.get('/user/delete/:id', (req, res) => {console.log(req.params.id)UserModel.deleteOne({ _id: req.params.id }).then(data => {res.send({ok: 1})})
})router.get('/user/find', (req, res) => {UserModel.find().sort({age:-1}).then(data => {res.send(data)})
})module.exports = router;