前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Egg 中结合Mongoose操作Mongodb

Egg 中结合Mongoose操作Mongodb

作者头像
越陌度阡
发布2020-11-26 10:42:52
2.1K0
发布2020-11-26 10:42:52
举报

1. 安装模块

代码语言:javascript
复制
npm i egg-mongoose --save

2. 配置 egg-mongoose 插件

代码语言:javascript
复制
// config/plugin.js
'use strict';
exports.ejs = {
    enable: true,
    package: 'egg-view-ejs',
};
// 配置egg-mongoose插件
exports.mongoose = {
    enable: true,
    package: 'egg-mongoose'
};

3. 配置连接数据库的信息

代码语言:javascript
复制
// config/config.default.js

'use strict';
module.exports = appInfo => {
    const config = exports = {};
    config.keys = appInfo.name + '_1534304805936_5738';
    config.middleware = [];
    exports.view = {
        mapping: {
            '.html': 'ejs',
        },
    };

    // 第一种配置方式
    // exports.mongoose = { 
    //     url: 'mongodb://127.0.0.1/test', 
    //     options: {}, 
    // };

    // 第二种配置方式(推荐)
    // 配置mongoose数据库
    exports.mongoose = {
        client: {
            // 有用户名和密码的数据库的连接方式
            // url:'mongodb://admin:123456@localhost:27017/test'
            url: 'mongodb://127.0.0.1/test',
            options: {},
        },
    };
    return config;
};

4. 创建 schema,生成模型

代码语言:javascript
复制
// app/model/user.js
module.exports = app => {
    // 引入建立连接的mongoose
    const mongoose = app.mongoose;   
    const Schema = mongoose.Schema;
    // 数据库表的映射
    const UserSchema = new Schema({
        username: { type: String },
        password: { type: String },
        status: {
            type: Number,
            default: 1
        }
    });
    return mongoose.model('User', UserSchema, 'user');
}

领域模型一般放置在 app/model 下面,可选,由领域类相关插件约定。

5. 操作数据库

代码语言:javascript
复制
// app/controller/user.js

'use strict';
const Controller = require('egg').Controller;
class UserController extends Controller {
    // 查询用户
    async index() {

        // 建议将操作数据库的方法放到service里
        var userList = await this.ctx.model.User.find({});
        this.ctx.body = '用户列表页面';
    }
    // 增加用户
    async addUser() {
        // 建议将操作数据库的方法放到service里
        var user = new this.ctx.model.User({
            username: '张三',
            password: '123456'

        });
        var result = await user.save();
        this.ctx.body = '增加用户成功';
    }
    // 编辑用户
    async editUser() {
        // 建议将操作数据库的方法放到service里
        await this.ctx.model.User.updateOne({
            "_id": "5b84d4405f66f20370dd53de"
        }, {
            username: "李四",
            password: '456789'
        }, function (err, result) {
            if (err) {
                console.log(err);
                return;
            }
        })
        this.ctx.body = '修改用户成功';
    }
    // 删除用户
    async removeUser() {
        // 建议将操作数据库的方法放到service里
        var result = await this.ctx.model.User.deleteOne({ 
            "_id": "5b84d4b3c782f441c45d8bab" 
        });
        // 需要对result作出判断
        this.ctx.body = '删除用户成功';
    }
}

module.exports = UserController;

6. 关联查询

代码语言:javascript
复制
// app/model/order.js

// 定义Order的schema,生成模型
module.exports = app => {
    const mongoose = app.mongoose; 
    const Schema = mongoose.Schema;
    var OrderSchema=Schema({
        order_id:String,
        uid:Number,
        trade_no:String,
        all_price:Number,
        all_num:Number    
    });

    return mongoose.model('Order',OrderSchema,'order');  
  
}

生成了订单表的模型后,就可以关联查询订单详情了。

代码语言:javascript
复制
// app/controller/order.js

'use strict';
const Controller = require('egg').Controller;
class OrderController extends Controller {
    async index() {
        // 实现关联查询
        var orderResult = await this.ctx.model.Order.aggregate([
            {

                $lookup: {
                    from: 'order_item',
                    localField: 'order_id',
                    foreignField: 'order_id',
                    as: 'items'
                }
            },
            {
                $match: { "all_price": { $gte: 90 } }
            }

        ]);
        this.ctx.body = orderResult;
    }
}

module.exports = OrderController;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装模块
  • 2. 配置 egg-mongoose 插件
  • 3. 配置连接数据库的信息
  • 4. 创建 schema,生成模型
  • 5. 操作数据库
  • 6. 关联查询
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档