Node03

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);
})

登录/注册接口

  1. 接收数据
  • body-parser解析消息体
  • 空值判断,格式验证
  1. 处理数据
  • 登录,查询数据,返回结果长度大于0
  • 注册,先查询数据是否已存在,再插入数据
  1. 返回数据
  • 根据执行结果,返回相应的数据

发送邮箱验证码

  1. 发送邮箱验证码
  2. 把验证码缓存下来
  3. 注册时校验验证码
  • 思考:
    如何防止用户频繁发送验证码?

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值