Mongoose是在node.js异步环境下对mongodb进行便捷操做的对象模型工具node
mongoose是针对mongoDB操做的一个对象模型库,封装了mongoDB对文档的、增删改查等方法mongodb
使用Koa链接mongoose数据库:数据库
一、安装npm
npm install mongoose --save-dev
二、引包数组
const mongoose = require('mongoose');
三、经过connect进行数据库链接异步
mongoose.connect('mongodb://localhost:27017')
四、使用connection监听链接状态(是否成功)async
connection是mongoose模块的默认引用,返回一个Connetion对象mongoose
mongoose.connection.on('connected',(err)=>{ if(err){ console.log('数据库链接失败'); }else{ console.log('数据库链接成功'); } })
数据库的一些链接状态工具
链接成功ui
mongoose.connection.on('connected', function(){});
链接异常
mongoose.connection.on('error', function (err){});
链接断开
mongoose.connection.on('disconnected', function(){});
schema
schema能够理解为是建模,是定义数据的一种格式(数据属性模型)
在Mongoose 中,全部数据都由一个 Schema 开始建立。schema不具有对数据库的操做能力,仅仅只是数据库模型在程序片断中的一种表现
每一个schema会映射到mongodb中的一个collection
let PersonSchema = new mongoose.Schema({ name:String, age:Number })
Schema中数据类型:
String 字符串类型
Number 数字类型
Date 日期类型
Boolean 布尔类型
ObjectId 主键,一种特殊的重要类型
Array 集合类型
Mixed 混合类型
model
定义好了Schema,而后生成Model,model是咱们构造document的Class
model是由schema生成的模型,能够对数据库的操做
var mongoose=require("mongoose"); mongoose.connect("mongodb://localhost/test"); var animalSchema=new mongoose.Schema({ name:String, type:String }); //Schema定义的方法,model的实例能够直接使用 var Animal=mongoose.model("Animal",animalSchema);//第一个参数是名字,第二个参数是schema名称
添加 save()
var Animal=mongoose.model("Animal",animalSchema); var dog=new Animal({ name:"小狗", type:"dog" }); dog.save();
等待这个异步操做完成后再往下执行,能够在save前面加上await
栗子:
router.get('/classInfo',async(ctx)=>{ let ojs = {}; let obj = ctx.request.query; switch (obj.act){ case 'add' : let add = new ClassInfo({ name:obj.name, id:obj.id, sex:obj.sex, }) await add.save(); ojs.code = 1; ojs.msg = '添加成功'; break } ctx.body = ojs; })
查询 find
User.find({'user' : 'ws'}, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } })
第二个字段能够设置要查询的字段,1表示输出该字段,0表示不输出该字段
find能够放在外面使用,也能够放在里面使用
栗子:
router.get('/classInfo',async(ctx)=>{ let ojs = {}; let obj = ctx.request.query; switch (obj.act){ case 'search' : let {id,name,sex} = obj; try{ let arr = await ClassInfo.find(JSON.parse(JSON.stringify( { id, name, sex } ))); ojs.code = 0; ojs.msg = '查询成功'; ojs.data = arr; }catch(err){ ojs.code = 1; ojs.msg = '查询失败'; ojs.data = []; } break; } ctx.body = ojs; })
条件查询中经常使用属性
/* $or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 $in 在多个值范围内 $nin 不在多个值范围内 $all 匹配数组中多个值 $regex 正则,用于模糊查询 $size 匹配数组大小 $maxDistance 范围查询,距离(基于LBS) $mod 取模运算 $near 邻域查询,查询附近的位置(基于LBS) $exists 字段是否存在 $elemMatch 匹配内数组内的元素 $within 范围查询(基于LBS) $box 范围查询,矩形范围(基于LBS) $center 范围醒询,圆形范围(基于LBS) $centerSphere 范围查询,球形范围(基于LBS) $slice 查询字段集合中的元素(好比从第几个以后,第N到第M个元素 */