zoukankan      html  css  js  c++  java
  • Mongoose笔记

    Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具

    mongoose是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的、增删改查等方法

    使用Koa连接mongoose数据库:

    1、安装

    npm install mongoose --save-dev

    2、引包

    const mongoose = require('mongoose');

    3、通过connect进行数据库连接

    mongoose.connect('mongodb://localhost:27017')

    4、使用connection监听连接状态(是否成功)

    connection是mongoose模块的默认引用,返回一个Connetion对象

    mongoose.connection.on('connected',(err)=>{
            if(err){
                console.log('数据库连接失败');
            }else{
                console.log('数据库连接成功');
            }
    })

    数据库的一些连接状态

    连接成功

    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个元素
    */
  • 相关阅读:
    mysql系列~mysqldump使用技巧
    mysql系列~logrotate
    最详细的经典双向电平转换电路的工作原理图文分析
    《USB应用分析精粹:从设备硬件、固件到主机程序设计》已经完稿
    Windows x86环境下使用QEMU安装arm架构银河麒麟V10操作系统
    不动产测绘包含哪些内容
    java问题收集
    java调用接口(rest-assured)
    java调用接口(okhttp )
    testng+allure
  • 原文地址:https://www.cnblogs.com/theblogs/p/10566769.html
Copyright © 2011-2022 走看看