eggJS 连接和使用Mongodb

5 篇文章 0 订阅
5 篇文章 0 订阅

开始之前先确保你的电脑已经装了mongoDB,且掌握了基本语法,如果没有请移至:

教程:http://www.runoob.com/mongodb/mongodb-tutorial.html

官网:https://www.mongodb.com/

在学习 mongodb 的过程中需要熟悉几个名词以及他们对应的关系型数据库名词。

关系型数据库mongodb
tablecollection
rowdocument
columnindex
table joinspopulate
primary key_id


下面就是连接数据库,这里先看下我的项目结构

 

安装依赖

npm i egg-mongoose --save   //https://www.npmjs.com/package/egg-mongoose

引入插件 app/config/plugin.js

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

我们项目中还有使用mysql数据库,ORM用的sequelize,引用了egg-mongoose发现和sequelize冲突,无奈只能先关闭了sequelize。我个人觉得是this.ctx.model只能被使用一次,有两个插件都用了就报错。如果大大们有新的发现或者好的解决方法请评论指导下!小弟这里先谢谢了???~

配置插件 app/config/config.default.js

//config中配置mongose连接mongodb数据库
//Mongodb://eggadmin:123456@localhost:27017 //有用户名密码的情况
exports.mongoose = {
    client: {
		url: 'mongodb://192.168.0.233/wgtest',  //你的数据库地址,不要端口
		options: {
	        useNewUrlParser: true,
		},
	}
};

例子 

app/model/Projects.js

module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;
    const OrderSchema = new Schema({
        name: {
            type: String
        },
    });
    return mongoose.model('Projects', OrderSchema, 'projects'); //返回model,其中projects为数据库中表的名称
}

 这里有个暂时没搞懂的问题,如果mongoose.model第一参数是Projects,而你的文件是test.js,在service调用的话得遵循你的文件名,且要大写(this.ctx.model.Projects.find({})),所以建议两者的名字保持统一。

名词解释

 Schema、Model、Entity 的关系请牢记,Schema 生成 Model,Model 创造 Entity,Model 和 Entity 都可对数据库操作造成影响,但 Model 比 Entity 更具操作性。 

  • Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
  • Model: 由Schema发布生成的模型,具有抽象属性和数据库操作能力
  • Entity: 由Model创建的实例,也能操作数据库

Schema.Type

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • Objectid
  • Array

app/service/projects.js

'use strict';

const Service = require('egg').Service;

class projects extends Service {

    /**
	 * 根据ID获取单个项目
	 */
	async getProjectById(id) {
		const ctx = this.ctx;
		try {
            var results = await this.ctx.model.Projects.find({
                _id: this.app.mongoose.Types.ObjectId(id)
            })
			return results;
		} catch (err) {
			ctx.body = JSON.stringify(err);
		}
	}
}

module.exports = projects;

this.app.mongoose.Types.ObjectId(id) // 因为mongoDB默认的id是ObjectId类型,所以要转一下,使用mongoose自带的就好

app/controller/projects.js

controller就不写了哈,大家的都差不多,调用service就成

参考文献:

https://blog.csdn.net/zdhsoft/article/details/79890131 

https://www.jianshu.com/p/08a602b5b0f1

https://blog.csdn.net/juzipidemimi/article/details/80683121

http://www.manongjc.com/article/23301.html

https://blog.csdn.net/u014155400/article/details/47279507

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值