• egg.js连接和使用Mongodb


    一、方法一 

    Egg连接Mongodb

     

    Cnpm i egg-mongo-native  --save

    Plugin.js中配置

    exports.mongo = {
    enable: true,
    package: 'egg-mongo-native',
    };

    Config.default.js配置

    config.mongo = {
    client: {
    host:"127.0.0.1",
    port:"27017",
    name:"test",
    user:"",
    password:"",
    options:{},
    }
    }

    查询语句使用

    var result = await this.app.mongo.find('users')

    二、方法二(推荐)

    Egg中使用Mongoose连接数据库

    https://www.npmjs.com/package/egg-mongoose

    配置

    npm i egg-mongoose --save
    exports.mongoose 
    = {   enable: true,   package: 'egg-mongoose', }; //config中配置mongose连接mongodb数据库 Mongodb://eggadmin:123456@localhost:27017 //有用户名密码的情况 exports.mongoose = { client: { url: 'mongodb://127.0.0.1/eggxiaomi', options: { useNewUrlParser: true, }, } };

    Schema的建立数据表集合的映射新建app/module文件夹新增 order.js

    module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;
    const OrderSchema = new Schema({
    order_id: { type: String },
    uid: { type: String },
    trade_no: { type: String },
    all_price: { type: Number },
    all_num: { type: Number },
    });
    return mongoose.model('Order', OrderSchema,'order');  //返回model
    }

    Model的建立

    增加数据

    Let addResult=this.ctx.request.body;
    Let  admin=new this.ctx.model.Order(addResult);
    admin.save();

    修改数据

    await this.ctx.model.Admin.updateOne({"_id":id},{
    mobile,email,role_id})

    查询

    Let id=this.ctx.request.query.id;
    Let result=await this.ctx.model.Admin.find({"_id":id});

    删除数据

    await this.ctx.model[model].deleteOne({"_id":id}); 

    数据预设

    Mongoose 预定义模式修饰符,可以对我们增加的数据进行一些格式
    Lowercase uppercase trim 
    Set()//建议使用mongoose,增加数据时匹配
    Sn:{
    Type:string
    Trim:true  //是否去掉空格
    index:1 //索引
    set(parmas){
    if(parmas.indexOf('http://')==0){
    return 'http://'+parmas
    }
    return parmas
    }

    数据校验

    Required
    Max
    Min
    Enum 枚举类型
    Match 增加的数据必须符合match正则
    Maxlength 最大值
    Minlength 最小值
    Name:{
    Type:string
    Required:true,
    Min:0,
    Max:150,
    Enum:[0,1,2,3], 枚举类型
    Match:/sn(.*)/i  //必须sn开头
    }
    自定义方法
    validate:function(desc){
    return desc.length>=10;
    }

    Mongoose中多对多的数据查询,和aggregate聚合管道

    管道操作

    $project

    增加,删除,重命名字段

    $match

    条件匹配,只满足条件的文档才能进入下一阶段

    $limit

    限制结果的数量

    $skip

    跳过文档的数量

    $sort

    条件排序

    $group

    条件组合结果 统计

    $lookup

    用以引入其它集合的数据

    sql和nosql对比

    Where

    $match

    group

    $group

    having

    $match

    select

    $project

    Order by

    Limit

    $sort

    $limit

    Sum()

    $sum

    Count()

    $sum

    join

    $lookup

    常用表达式操作符

    Description

    $addToSet

    将文档指定字段的值去重

    $max

    文档指定字段的最大值

    $min

    文档指定字段的最小值

    $sum

    文档指定字段求和

    $avg

    文档指定字段求平均

    $gt

    大于给定值

    $lt

    小于给定值

    $eq

    等于给定值

    var result=await this.ctx.model.Admin.aggregate([{
    $lookup:{
    from:'role',
    localField:'role_id',
    foreignField:'_id',
    as:'role'
    } 
    },
    {
    $match:{'role_id':10} 
    }
    ])

    聚合管道的使用

    db.order.aggregate([
    {    
        $project:{ trade_no:1, all_price:1 }
    },
    {
        $match:{"all_price":{$gte:90}}
    },
    {
        $sort:{"all_price":-1}
    },
    {
        $skip:1
    }
    
    ])
  • 相关阅读:
    c++ 设计模式6 (Decorator 装饰模式)
    c++ 设计模式7 (Bridge 桥模式)
    c++ 设计模式8 (Factory Method 工厂方法)
    c++ 设计模式9 (Abstract Factory 抽象工厂模式)
    C++类设计2(Class with pointer members)
    C++类设计1(Class without pointer members)
    算法总结—链表
    C++对象内存模型1(堆栈模型)
    PHP 页面编码声明方法详解(header或meta)
    php变量与数组相互转换的方法(extract与compact
  • 原文地址:https://www.cnblogs.com/kbnet/p/10120738.html
Copyright © 2020-2023  润新知