Egg 中结合Egg-mongo-native 操作 MongoDB 数据库

1. 安装模块

npm i egg-mongo-native --save

2. 配置插件

// config/plugin.js

'use strict';
exports.ejs = {
    enable: true,
    package: 'egg-view-ejs',
};


// 添加egg-mongo-native插件
exports.mongo = {
    enable: true,
    package: 'egg-mongo-native',
};

3. 配置数据库

// config/config.default.js
'use strict';
module.exports = appInfo => {
    const config = exports = {};

    // use for cookie sign key, should change to your own and keep security
    config.keys = appInfo.name + '_1534304805936_5738';

    // add your config here
    config.middleware = [];

    exports.view = {
        mapping: {
            '.html': 'ejs',
        },
    };

    // 配置数据库
    exports.mongo = {
        client: {
            host: '127.0.0.1',
            port: '27017',
            name: 'database',
            user: 'admin',
            password: '123456',
            options: {},
        },
    };


    return config;
};

4. 操作数据库

// app/controller/news.js

'use strict';
// 引入模块,实现可以按ID操作数据库
var ObjectID = require('mongodb').ObjectID;
const Controller = require('egg').Controller;
class NewsController extends Controller {
    async index() {

        // 和数据库打交道建议放在服务里面

        // 1.增加数据
        var insertResult = await this.app.mongo.insertOne('users', {
            doc: { name: '李四', age: 20, sex: 1 }
        })

        // 2.删除数据
        var deleteResult = await this.app.mongo.findOneAndDelete('users', {
            filter: { "name": "赵六" }
        })


        // 3.修改数据
        var updateResult = await this.app.mongo.findOneAndUpdate('users', {
            filter: { "name": "王五" },
            update: {
                $set: { name: '赵六', age: 100 }
            }
        })

        // 4.查找数据
        var findResult = await this.app.mongo.find('users', {
            query: { "name": "张三" },
            limit: 1
        });

        // 5.按ID查找的数据 
        var findResultById = await this.app.mongo.find('users', {
            query: { "_id": ObjectID('5b72abc7e4f0720a68f05b41') }
        });

        // 6.多表关联查询
        var aggregateResult = await this.app.mongo.aggregate('order', {
            pipeline: [
                {
                    $lookup:
                    {
                        from: "order_item",
                        localField: "order_id",
                        foreignField: "order_id",
                        as: "items"
                    }
                },
                {
                    $match: { "all_price": { $gte: 90 } }
                },
                {
                    $limit: 2
                }

            ],
            // 其它的操作,如:是否为执行查询分析
            options: {}
        })

        this.ctx.body = '新闻页面';

    }
}

module.exports = NewsController;

5. 定义扩展实现全局的按ID操作数据库

定义扩展。

// app/extend/application.js
var ObjectID = require('mongodb').ObjectID;

module.exports = {
    getObjectID(params) {
        // this 就是 app 对象,在其中可以调用 app 上的其他方法,或访问属性
        return ObjectID(params)
    }
};

用定义的全局扩展按ID操作数据库。

// app/controller/home.js
'use strict';
const Controller = require('egg').Controller;

class HomeController extends Controller {
    async index() {
        // 和数据库打交道建议放在服务里面
        
        // 按ID查找
        var findResult = await this.app.mongo.find('users', { 
            query:{ "_id": this.app.getObjectID('5b72abc7e4f0720a68f05b41')} 
        });
        // 按ID删除
        var deleteResult = await this.app.mongo.findOneAndDelete('users', { 
            filter:{"_id": this.app.getObjectID('5b72ad791c2ba42e6c5a4a78')} 
        });
        this.ctx.body = '个人中心页面';
    }
}
module.exports = HomeController;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aiguangyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值