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基础入门相关推荐

  1. Mongoose基础入门

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:https://www.cnblogs.com/xiaohuochai/p/7215067.html ...

  2. koa 基础入门与源码学习

    Koa 学习笔记 本期内容主要为 koa 基础与源码学习,后续会开一期 koa 项目实战.本文基础部分目录结构按照阮一峰老师的 koa 教程(有作修动).望本文能对您有所帮助!☀️ 前置基础 node ...

  3. Koa入门(一)—— Koa项目基础框架搭建

    Koa项目基础框架搭建 项目初始化 项目自动重启 配置ES6语法 基本目录搭建 配置env信息 自动加载路由 统一异常处理 自定义异常 异常处理中间件 中间件配置 目录别名配置 项目初始化 mkdir ...

  4. Koa 2 基础(仿知乎)

    Koa 2 基础 接口文档 Postman仿知乎在线测试 REST 简介 REST是什么 REST是Resource Representational State Transfer的缩写,是一种Web ...

  5. 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js

    20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...

  6. 用python循环语句求素数_Python基础入门_3条件语句和迭代循环

    Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...

  7. MAYA 2022基础入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...

  8. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  9. 三维地形制作软件 World Machine 基础入门学习教程

    <World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...

最新文章

  1. 四.Android adb命令(持续更新...)
  2. dojo gridx修改表头
  3. java 拒绝访问_java.io.FileNotFoundException: ……(拒绝访问。)
  4. SpringCloud(Gateway网关跨域)
  5. python逻辑取反运算符_python学习笔记------逻辑运算符
  6. Nginx部署静态页面及引用图片有效访问的两种方式
  7. rk3288 android5.1 java 层使用 su 获取 root 权限
  8. 闰年的判断方法_练习题079:如何判断某年为闰年
  9. modelsim error:iteration limit reached at time xxx ns.
  10. Local time zone must be set-see zic manual page
  11. 道里云公司网络虚拟化架构NVI技术开放源代码--序言
  12. 三个灭点来衡量一个立方体
  13. Τεχνική υποστήριξη
  14. iOS第三方支付——银联支付
  15. 驱动开发:实现字符设备
  16. 【转载】Linux查看PCIe版本及速率【方法】PCIE的X4X8X16 查看 数量 怎么看
  17. 同人女,我想对你说——黄金圣斗士对同人女的真情告白
  18. go每日新闻--2020-12-23
  19. 《比尔总动员》1——20级变强攻略之胶囊制作
  20. python 加注拼音-Python pypinyin库,实现文字转拼音

热门文章

  1. Nagios之事件处理
  2. phpcms V9判断奇数偶数的实例
  3. chrome dev debug network 的timeline说明
  4. php 魔术方法 说明
  5. Dorado7功能及技术特点
  6. ARM 寄存器 和 工作模式了解
  7. 创建第一个freemarker
  8. 10倍效率的程序员的好习惯,你有几个?
  9. MS UI Automation Introduction
  10. WPF中的容器控件——Grid