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个元素
*/
相关文章
相关标签/搜索