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

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

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

1. 安装模块

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

2. 配置插件

代码语言:javascript
复制
// 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. 配置数据库

代码语言:javascript
复制
// 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. 操作数据库

代码语言:javascript
复制
// 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操作数据库

定义扩展。

代码语言:javascript
复制
// app/extend/application.js
var ObjectID = require('mongodb').ObjectID;

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

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

代码语言:javascript
复制
// 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;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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