MongoDB 非关系型数据库
1.下载安装包:https://www.mongodb.com/download-center/community
2.安装流程:
next
勾选同意 -> next
选择complete
去掉Install MongoDB as a Service -> next
去掉Install MongoDB Compass -> next
install ....
finish
3.在cmd中执行 mongod 启动数据库(保留当前终端窗口,等待连接),
提示缺少目录:c:\data\db 需要自己创建
4.在cmd中执行 mongo 连接操作数据库,执行 show dbs,显示数据库,安装成功!!!
注意:提示找不到命令,需要去配置系统环境变量(配置完重启cmd后执行3 4)
配置系统环境变量:C:\Program Files\MongoDB\Server\4.2\bin
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
mongodb存储的是文档,且文档是json格式的对象,所以增删改查都必须是json格式对象
指令:
mongod 启动数据库(保留当前终端窗口,等待连接)
mongo 连接操作数据库
show dbs 查看所有数据库
db 查看当前数据库
use mydb 切换到指定数据库(不存在则创建数据库)
db.dropDatabase() 删除当前数据库(注意切换到指定数据库)
show collections 查看当前数据库已有集合(表)
db.createCollection("users") 创建集合(表)
db.users.drop() 删除当前数据库中的users集合
db.users.insert({name:'xm',age:23,sex:1}) 向集合中插入文档(集合不存在会被自动创建)
db.users.remove({'title':'123'}) 删除所有title为123的数据
db.users.remove({'title':'123'},1) 删除1条title为123的数据
db.users.remove({}) 删除所有数据
db.users.update({'title':'123'},{$set:{'title':'456'}}) 更新集合内容
db.users.find() 查询当前集合所有内容
db.users.find({key1:value1}) 查询当前集合指定内容
db.users.find({age:{$gt:25}}) 查询age大于25的文档
db.users.find({age:{$lt:25}}) 查询age小于25的文档
db.users.find({age:{$ne:25}}) 查询age不等于25的文档
db.users.find({age:{$in:[20,25]}}) 查询age为20和25的文档
db.users.find({$or:[{age:{$gt:22}},{sex:1}]}) 查询age大于22 或 sex为1的文档
db.users.find({$and:[{age:{$gt:22}},{sex:1}]}) 查询age大于22 且 sex为1的文档
db.users.find({name:/m$/}) 正则表达式查询name结尾是m的文档
可视化操作工具
- 安装:Robo 3T
mongoose模块,node操作数据库的插件
文档:http://mongoosejs.net/docs/index.html
安装:npm install mongoose
mongoose 的一切始于 Schema
通过schema[ˈskiːmə]对象来操作数据库
// 引入模块
const mongoose = require('mongoose')
// 连接数据库test
// mongoose.connect('mongodb://localhost/test')// 比较老的语法,会有警告,但不影响使用
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true,
useUnifiedTopology: true })// 添加一个配置项,不会有警告
// 数据库链接对象
let db = mongoose.connection
// 监听连接失败事件
db.on('error', console.error.bind(console, 'connection error:'))
// 监听连接成功事件
db.once('open', function() {
console.log('--------- db connect ok ----------')
})
// 创建一个与集合相关的schema对象(需要几张表就创建几个schema对象)
let userSchema = new mongoose.Schema({
us: {type:String,required:true},
ps: {type:String,required:true},
age: {type:Number,default:99},
sex: {type:Number,default:0}
})
// 将schema对象转化为数据模型
// mongoose.model('表名/集合名', schema对象)
let User = mongoose.model('users', userSchema)// 使用User来进行增删改查
// 增加数据
User.insertMany({user:'小王',pass:'777888',age:23,sex:1})
.then((data)=>{
console.log('插入成功');
console.log(data);
})
.catch((err)=>{
console.log(err);
})
// 删除数据
User.remove({age:18})
.then((data)=>{
console.log('删除成功');
console.log(data);
})
.catch((err)=>{
console.log(err);
})
// 修改数据
User.update({user:'xiaohong'},{age:18})
.then((data)=>{
console.log('修改成功');
console.log(data);
})
.catch((err)=>{
console.log(err);
})
// 查询数据
User.find({age:17})
.then((data)=>{
console.log('查询成功');
console.log(data);
})
.catch((err)=>{
console.log(err);
})
登录/注册接口
- 接收数据
- body-parser解析消息体
- 空值判断,格式验证
- 处理数据
- 登录,查询数据,返回结果长度大于0
- 注册,先查询数据是否已存在,再插入数据
- 返回数据
- 根据执行结果,返回相应的数据
发送邮箱验证码
- 发送邮箱验证码
- 把验证码缓存下来
- 注册时校验验证码
- 思考:
如何防止用户频繁发送验证码?
API文档
地址:https://apidocjs.com/
安装:npm install apidoc -g
写注释:拷贝文档上的实例
生成api文档:apidoc -i ./router -o ./apidoc
说明:编译当前目录下router文件夹中的所有文件,输出到当前目录下的apidoc文件夹中
项目根目录创建 apidoc.json
{
"name": "用户",
"version": "0.1.0",
"description": "用户登录、注册接口文档",
"title": "接口文档",
"url" : "http://127.0.0.1:3000"
}
注释示例:
/**
* @api {post} /file/upload 上传图片
* @apiGroup file
*
* @apiParam {String} upfile 要上传图片数据的key值
*
* @apiSuccessExample 返回数据示例:
* {
* "err": 0,
* "msg": "ok 上传成功",
* "imgurl": "/static/uploads/upfile-1589360718128-12365.jpg"
* }
*/
Q.E.D.