数据库分类:
关系型数据库:Mysql、oracle、OB2、SQL server
文档型数据库:Mongodb
内存型数据库:Redis
MongoDB在CMD命令行中的基本使用
概念:它是一个文档型数据库,它没有表这样的概念;只有集合概念,数据都是以json对象的形式进行存储;集合可以存储任意字段和数据类型的数据。
a、帮助方法的使用
全局help命令,可以查看Mongodb数据库的全局命令
db 是指当前Mongodb对象
db.help() 数据库的帮助方法
db 是指具体的业务数据库对象,mycoll 在业务数据库中自定义的集合名字
db.mycoll.help()
show dbs 展示当前mongodb中所有的业务数据库名字
show collections 展示当前业务数据库中的所有集合名字,一定要设置当前业务数据库
use db_name 设置db_name这个业务数据库为当前业务数据库对象
b、查看数据库常用方法
在Mongodb中不需要新增数据库和集合,直接use会动态的去占用的一个空间,而且这个空间如果没有数据,那么它不会存在;
集合只需要往里边写入数据,那么数据库和集合会自动创建
c、数据新增、查询
db.user_info.insertOne({id: 'admin', name: 'admin', age: 20, sex: '男'})
db.user_info.insertMany([{"id":"admin0","name":"admin0","age":21,"sex":"男"},{"id":"admin1","name":"admin1","age":22,"sex":"男"},{"id":"admin2","name":"admin2","age":23,"sex":"男"},{"id":"admin3","name":"admin3","age":24,"sex":"男"},{"id":"admin4","name":"admin4","age":25,"sex":"男"}])
db.user_info.find()
1、MongoDB在CMD命令行中的基本使用 -- 在集合中有一个_id字段,是Mongodb自动添加的唯一标识,不要去修改
d、数据修改
db.user_info.update({id: 'admin0'}, {sex: '女'}) 它是精确匹配,然后重置对象
db.user_info.update({}, {sex: '女'}) 把数据全部改为传递第二个参数,他会匹配第一条数据
e、数据删除
db.user_info.deleteOne({sex: '男'}) 如果是要删除,一般是遍历删除,不允许批量删除,会删除匹配到的第一条数据
db.user_info.deleteMany({sex: '女'}) 删除多条
f、数据条件查询 -- db.user_info.find([query],[fields])
db.user_info.find({age: 22}) 年龄为22岁的用户信息
要查询年龄要大于或则小于多少的用户数据
db.user_info.find({age: {$gt: 22}}) 大于
db.user_info.find({age: {$gte: 22}}) 大于等于
db.user_info.find({age: {$gte: 22, $lt: 24}})
设置返回字段 -- fields中设置为0表示不返回字段,1表示要返回的字段
db.user_info.find({}, {id: 0, name: 0})
db.user_info.find({}, {id: 1, name: 1, _id: 0})
2、用户数据模型设计
数据模型是把真实世界中的事物抽象成一个数据对象
用户数据模型:用户在数据库中如何存在
{
id: 唯一键,
name: String,
age: Number,
sex: Number, 1、0
phone: String,
email: String,
address: String,
brithday: Date,
date: Date
}
mongoose是一个ODM(object document mapping对象到文档数据的一个映射) 映射框架
项目流程:
a、mkdir
b、npm init -y
c、修改package.json和readme
d、新建index.js
e、安装依赖 express mongoose
f、引入框架、实例化
g、监听端口启动服务
h、做一个静态服务器
h0、新建一个静态文件夹用于放置静态文件(html,html中使用的js,html使用图片,html使用的css)
h1、新建一个login.html TODO
h2、使用中间件(express.state(root path))来定义文件夹为一个静态资源包
i、使用get(path, handler: (req, res) => void))方法来定义接口
3、mongo数据库连接,以及增删改查操作
/**
* @author hengxin.ye
* @time 2022-03-29
* @description 项目入口文件
*/
const express = require('express')
const app = express()
// static(root: string, options?: serveStatic.ServeStaticOptions)
app.use(express.static('public', { index: 'login.html' }))
//连接数据库并建立数据模型
const Mongoose = require('mongoose')
// connect(uri: string, callback: Mongoose.CallbackWithoutResult): void
// uri 应该是一个连接地址:mongodb://127.0.0.1:27017/业务数据库名字
Mongoose.connect('mongodb://localhost:27017/music_server', (err) => {
if (!!err) {
console.log('-----------数据库连接失败')
} else {
console.log('---------数据库连接成功')
}
})
//数据模型的具体描述
const userSchema = new Mongoose.Schema({
id: Number,
name: String,
password: String,
})
//数据模型
const UserModel = Mongoose.model('UserModel', userSchema, 'user_info')
//查询的接口
app.get('/user/list', (req, res) => {
// find(callback?: Mongoose.Callback<any[]>)需要一个回调方法,然后返回有一个形参
// find(filter: Mongoose.FilterQuery, callback?: userModel.Callback<ResultDoc[]>)
//需要FilterQuery查询条件参数,callback回调方法,然后返回有一个形参。
UserModel.find(({ name: 'zs' }), function(err, result) {
if (!!err) {
console.log(err)
res.send({ code: 500, message: '服务器错误' })
} else {
res.send({ code: 200, message: 'success', data: result })
}
})
})
// 删除接口 -- 只需要一个id参数,然后返回一个是否成功
// 可以再地址上进行参数传递,可以使用query参数;
// 是否可以直接用地址进行参数传递 -> 地址是动态的,它由固定地址和动态id参数组成 -> 动态路由
// 定义的时候,需要把动态字符串,用户:key进行拼接
// 前端在使用的时候,需要:id替换为你要传递的参数。
// 例如:/user/:id 在进行接口请求的时候,用户编码为admin0 => 变为/user/admin0
app.delete('/user/:id', (req, res) => {
// 在地址中以?传递的参数:使用req.query
// 在请求体中传递的参数:使用req.body
// 动态路由参数:使用req.params => 这个也是一个对象
UserModel.deleteOne({id: req.params.id}, err => {
if (!!err) {
res.send({code: 500, message: '服务器错误'})
} else {
res.send({code: 200})
}
})
// console.log(req.params)
// res.send({code: 200, id: req.params})
})
//添加接口
app.put('/user/add', (req, res) => {
let data = req.body
// 写入到数据库
// 在进行数据保存的时候,需要实例化数据模型
const user = new UserModel(data)
user.save(err => {
if (!!err) {
res.send({code: 500, message: '服务器错误'})
} else {
res.send({code: 200})
}
})
})
//修改接口
app.post('/user/update', (req, res) => {
let data = req.body
UserModel.updateOne({id: data.id}, {$set: data}, err => {
if (!!err) {
res.send({code: 500, message: '服务器错误'})
} else {
res.send({code: 200})
}
})
})
app.listen(8088, function() {
console.log('-------服务器启动')
})
\