koa+mongoose基础入门
1.mongoose基本使用
1.安装mongodb
npm install mongodb
2.引入mongodb数据表,连接mongodb,通过node来对mongodb进行异步的增删改查
const mongodb = requrie('mongodb');
mongodb.MongoClient.connect("mongodb://localhost/db1", function(err,db){if(!err){db.connection("col").insert({"a": 1}), function(err, res){if(!err){console.log(result);}}}
}
复制代码
以上代码,在mongodb数据库中建立了db1数据库,然后建立了col集合,并插入{"a":1}文档
可以看出不是很好使用,所以使用mongoose简化操作
3.什么是mongoose
mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。
有两个特点:
1.通过关系型数据库的思想来设计非关系型数据库
2.基于mongodb驱动,简化操作
mongoose有三个重要概念,分别是Schema,Model,Entity。
它们的关系是:Schema生成Model,Model创造Document,Model和Document都可对数据库操作造成影响,但Model比Document更具操作性。
4.安装mongoose和连接数据库
1.安装
npm install mongoose
2.引入mongoose
import mongoose from 'mongoose'
或者
const mongoose = require('mongoose')
3.使用connect()方法连接到mongodb数据库
1.连接到本地的db1服务器
mongoose.connect('mongodb://localhost/db1');
复制代码
2.以用户名"u1",密码"123456"登录'db1'数据库
mongooge.connect('mongodb://ul:123456@localhost/db1', function(err){if(err){console.log('连接失败')}else{console.log('连接成功')}
})
复制代码
3.断开连接
mongoose.disconnect()
复制代码
5.一些概念
1.Schema
1.Schema主要用于定义MongoDB中集合Collection里文档document的结构
支持的类型有:String,Number,Date,Buffer(二进制),Boolean,Mixed(混合类型),ObjectId(对象ID),Array
2.新建Schema对象
import mongoose from 'mongoose';
const Schema = mongoose.Schema;const mySchema = new Schema({title: String,comments: [{body: String,date: Date}],date: {type: Date,default: Date.now}
})
复制代码
3._id
每一个文档document都会被mongoose添加一个不重复的_id,_id的数据类型不是字符串,而是ObjectID类型。如果在查询语句中要使用_id,则需要使用findById语句,而不能使用find或findOne语句
2.Model
1.模型Model是根据Schema编译出的构造器,同Model可以实例化出文档对象document
2.使用model()
const schema = new mongoose.Schema({num: Number,name: String,size: String
});
const myModel = mongoose.model('myModel', schema);
复制代码
3.实例化文档document
const doc1 = new myModel({size: 'small'});
复制代码
4.文档保存 通过new myModel()创建的文档doc1,必须通过save()方法,才能将创建的文档保存到数据库的集合中,集合名词为模型名称的小写复数版
doc1.save(function(err, doc){console.log(doc);
})
复制代码
6.常用API
model-文档操作
查
Model.find(query, [fields, options,] callback)
1.返回所有集合文档
忽略第一个参数,或为空对象 model.find({}, callback)
2.过滤查询
修改第二个参数,返回结果包含name,不包含age,_id默认为1
model.find({}, {'name':1,'age':0}, callback)
3.限制返回结果数量
第三个参数,游标操作limit限制返回结果数量为20个,不足20个则返回所有 model.find({}, null, {limit:20});
4.查询找到的第一个文档
model.findOne({}, callback);
5.根据_id查询
model.findById('obj_id', callback)
增
1.model.create(文档数据,callback)
const doc =({title: "mongoose",author: "chen"
});
blogModel.create(doc, function(err, docs){
});
复制代码
2.model.save([options],[options.safe],[options.validateBeforeSave],[fn])
const blogEntity = new blogModel({title: "mongoose",author: "chen"
});
blogEntity.save(function(err,docs){
});
复制代码
3.model.insertMany(doc(s),[options],[callback]) 将多条数据库一次性插入 blogModel.insertMany([ {title: 'mongoose1', author: 'chen1'}, {title: 'mongoose2', author: 'chen2'} ],function(err, docs){ } ])
改
model.update(查询条件,更新对象,可以使用mongodb的更新修改器) model.update(conditions, update, callback)
options控制选项:
safe:默认为true,安全模式
upsert:默认为false,不存在就创建新纪录
multi:默认为false,是否更新多个查询记录
runValidators:如果为true,执行Validation验证
setDefaultsOnInsert:如果upsert为true,在新建时插入文档定义的默认值
strict:以strict模式进行更新
overwrite:默认为false,禁用update-only模式,允许覆盖记录
blogModel.update({title:"mongoose"},{author:"miao"},{multi:true},function(err,docs){})
复制代码
删
model.remove(查询条件,回调函数) model.remove(conditions, callback)
2.nuxt+koa+mongoose中的实际使用
1.首先配置数据库
server/dbs/config.js
export default{dbs: 'mongodb://127.0.0.1:27017/student'
}
复制代码
2.编写数据表模型
server/dbs/models/address.js
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const AddressSchema = new Schema({user: {type: String,required: true},name: {type: String,required: true},gender: {type: Number,required: true},tel: {type: String,required: true},address: {type: String,required: true},houseNum: {type: String,required: true},type: {type: Number},del: {type: Boolean}
})
export default mongoose.model('Address', AddressSchema)
复制代码
3.编写接口
server/interface/address.js
import Router from 'koa-router';
import Address from '../dbs/models/address';// 定义路由前缀
let router = new Router({prefix: '/address'
})
// 新增收货地址
router.post('/add', async (ctx) => {if(!ctx.isAuthenticated()){ctx.body = {code: -1,msg: 'please login'}}else{const {name,gender,tel,address,houseNum,type} = ctx.request.body;let naddress = new Address({user: ctx.session.passport.user,name,gender,tel,address,houseNum,type,del: false})let result = await naddress.save()if(result){ctx.body = {code: 0,msg: 'success'}}else{ctx.body ={code: -1,msg: 'fail'}}}
})
// 修改收货地址
router.post('/edit', async (ctx) => {if(!ctx.isAuthenticated()){ctx.body = {code: 1,msg: 'please login'}}else{const {name,gender,tel,address,houseNum,type} = ctx.request.body;try{let result = await Address.update({'_id': id},{name,gender,tel,address,houseNum,type})ctx.body = {code: 0,msg: result}}catch(e){ctx.body ={code: -1,msg: 'fail'}}}
})// 删除地址
// 这里没有真的删除,而是改变了del的值
router.get('/del', async (ctx) => {if(!ctx.isAuthenticated()){ctx.body = {code: 1,msg: 'please login'}}else{let {id} = ctx.query;try{let result = await Address.update({'_id': id}, {'del': true})ctx.body = {code: 0,msg: result}}catch(e){ctx.body = {code: -1,msg: 'fail'}}}
})
// 获取单个地址
router.get('/getOne', async ctx => {if(!ctx.isAuthenticated()){ctx.body = {code: -1,msg: 'please login'}}else{let id = ctx.query.id;try {let result = await Address.findOne({'_id': id,'del':false})ctx.body = {code: 0,data: result}}catch(e){ctx.body = {code: -1,data: {}}}}
})// 获取该用户所有地址
router.get('/getAll', async ctx => {if(!ctx.isAuthenticated()){ctx.body = {code: -1,msg: 'please login'}}else{try {let result = await Address.find({'user': ctx.session.passport.user,'del':false})ctx.body = {code: 0,data: result}}catch(e){ctx.body = {code: -1,data: {}}}}
})export default router
复制代码
4.引入接口
server/index.js
import mongoose from 'mongoose'
import dbConfig from './dbs/config'
import address from './interface/address'// 连接数据库
mongoose.connect(dbConfig.dbs, {useNewUrlParser: true
})// 引入路由
app.use(address.routes()).use(address.allowedMethods())
复制代码
koa+mongoose基础入门相关推荐
- Mongoose基础入门
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:https://www.cnblogs.com/xiaohuochai/p/7215067.html ...
- koa 基础入门与源码学习
Koa 学习笔记 本期内容主要为 koa 基础与源码学习,后续会开一期 koa 项目实战.本文基础部分目录结构按照阮一峰老师的 koa 教程(有作修动).望本文能对您有所帮助!☀️ 前置基础 node ...
- Koa入门(一)—— Koa项目基础框架搭建
Koa项目基础框架搭建 项目初始化 项目自动重启 配置ES6语法 基本目录搭建 配置env信息 自动加载路由 统一异常处理 自定义异常 异常处理中间件 中间件配置 目录别名配置 项目初始化 mkdir ...
- Koa 2 基础(仿知乎)
Koa 2 基础 接口文档 Postman仿知乎在线测试 REST 简介 REST是什么 REST是Resource Representational State Transfer的缩写,是一种Web ...
- 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js
20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...
- 用python循环语句求素数_Python基础入门_3条件语句和迭代循环
Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...
- MAYA 2022基础入门学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...
- Blender 3.0基础入门学习教程 Introduction to Blender 3.0
成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...
- 三维地形制作软件 World Machine 基础入门学习教程
<World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...
最新文章
- 四.Android adb命令(持续更新...)
- dojo gridx修改表头
- java 拒绝访问_java.io.FileNotFoundException: ……(拒绝访问。)
- SpringCloud(Gateway网关跨域)
- python逻辑取反运算符_python学习笔记------逻辑运算符
- Nginx部署静态页面及引用图片有效访问的两种方式
- rk3288 android5.1 java 层使用 su 获取 root 权限
- 闰年的判断方法_练习题079:如何判断某年为闰年
- modelsim error:iteration limit reached at time xxx ns.
- Local time zone must be set-see zic manual page
- 道里云公司网络虚拟化架构NVI技术开放源代码--序言
- 三个灭点来衡量一个立方体
- Τεχνική υποστήριξη
- iOS第三方支付——银联支付
- 驱动开发:实现字符设备
- 【转载】Linux查看PCIe版本及速率【方法】PCIE的X4X8X16 查看 数量 怎么看
- 同人女,我想对你说——黄金圣斗士对同人女的真情告白
- go每日新闻--2020-12-23
- 《比尔总动员》1——20级变强攻略之胶囊制作
- python 加注拼音-Python pypinyin库,实现文字转拼音