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個元素 */