Mongoose筆記

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個元素
*/
相關文章
相關標籤/搜索