导读javascript
juejin.im/post/5c99cb… egg-从入门到上线 (上)java
juejin.im/post/5cf47b… egg-从入门到上线 (下)linux
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的状况下,添加更多的节点,能够保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组web
homebrew的安装查看官网,安装完成后,在终端中输入如下命令更新homebrew的package数据库正则表达式
brew update
复制代码
提示:
brew update
升级brew的版本库,brew outdated
查看outdated的库和应用,brew upgrade
升级outdated的库和应用,brew cleanup
清理调过时的库和应用mongodb
使用homebrew安装mongodb,在MAC的终端中输入数据库
cd /
复制代码
brew install mongodb
复制代码
若要查看安装信息npm
brew info mongodb
复制代码
查看mongodb的版本json
mongo --version
复制代码
which mongod
复制代码
/usr/local/bin/mongod数组
若是这样了就安装成功了
启动服务
sudo mongod
复制代码
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
复制代码
下载完成后解压缩压缩包
tar zxf mongodb-linux-i686-1.8.2.tgz
复制代码
将mongodb移动到/usr/local/server/mongdb文件夹
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
复制代码
建立数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
复制代码
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend --auth -–port=27017" >> /etc/rc.local
复制代码
cd到mongodb目录下的bin文件夹启动mongodb
下面这个是须要权限的登陆方式, 用户链接须要用户名和密码
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --auth --port=27017 --fork
复制代码
这个是不须要密码的(不建议)
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
复制代码
cd /www/server/mongodb/bin
复制代码
mongo
复制代码
use admin
复制代码
db.createUser({user: 'root', pwd: 'admin_mima', roles: ['root']})
复制代码
db.auth('root', 'admin_mima')
复制代码
若是返回 '1’表示验证成功, 若是是 ‘0’ 表示验证失败。
use asGiant
复制代码
db.createUser({ user: 'aaaa', pwd: 'graphql_mima', roles: [{ role: 'readWrite', db: 'asGiant' }] })
复制代码
这行代码意思是 建立一个cccc用户 给予读写权限 db表示该用户操做的数据库名。
一切搞定,从新开机mongodb,经过增长
--auth
开启安全登陆
mongod --dbpath /www/server/mongodb/data --auth
复制代码
若是你是手动安装,那么须要如下操做
mongodb,MongoDB默认是没有开启访问控制,咱们经过--auth
参数重启mongod服务。
mongod --dbpath 存放数据库文件夹路径 --auth
mongod --dbpath usr/local/mongodb/bin --auth
复制代码
一旦开启了,用户链接mongod必须指定用户名和密码。
若是你采用的是宝塔一键完成的
能够经过修改mongodb
的配置文件来实现
修改成
net:
port: 27017
bindIp: 0.0.0.0
#operationProfiling:
#replication:
# replSetName: bt_main
security:
authorization: enabled
javascriptEnabled: false
复制代码
建立一个链接
点击test
安装完成
xxx.db('mongodb://your name: your pwd@ip:27017/asgiant');
your name
:为用户名your pwd
:为密码
当mongodb 数据库打开了 auth认证 之后 就不能直接使用 dump 而须要提供对应的帐号密码 以下
mongodump -h 127.0.0.1:27017 -d asGiant -u 'myz' -p '123456' -o /usr/local/mongodb/dump
复制代码
-h 地址
-d 数据库名称
-u 用户名
-p 密码
-o 输出地址
--authenticationDatabase admin 验证帐户的数据库
mongorestore命令脚本语法以下:
mongorestore -h <hostname><:port> -d dbname <path>
复制代码
mongorestore -h localhost:27017 -d asGiant -c user --dir /usr/local/mongodb/dump -u myz -p 12346
复制代码
mongodump -u root -p 123456
mongorestore -u root -p 123456
$ npm install egg-mongoose --save
复制代码
改变Egg项目中的配置文件{workplace}/config/plugin.js中来启用 egg-mongoose 插件:
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
复制代码
在Egg项目中的配置文件{workplace}/config/default.js配置项config添加属性
config.mongoose = {
url: process.env.EGG_MONGODB_URL || 'mongodb://127.0.0.1/website',
options: {
server: {
poolSize: 40,
},
},
};
复制代码
链接方法
config.mongoose = {
client: {
url: 'mongodb://帐号:密码@服务器:端口/库名',
options: {},
},
};
复制代码
在{workplace}/app/model/article.js定义数据表
'use strict';
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const RoleSchema = new Schema({
role: {
type: String,
index: {
unique: true,
}, // 该字段为惟一字段
require: true, // 必填项
},
roleName: {
type: String,
require: true,
},
// 备注
note: {
type: String,
require: true,
},
});
return mongoose.model('Role', RoleSchema, 'role');
};
复制代码
数据类型 | |
---|---|
Number | 数字 |
String | 字符串 |
Boolean | 布尔值 |
ObjectId | 对象ID |
Array | 数组 |
Date | 日期 |
Buffer | 二进制 |
Mixed | 混合类型 |
this.ctx.model.Article.create(post,callback);
复制代码
备注:其中post为json数据结构,callback为操做后的回调函数
this.ctx.model.Article.find()
复制代码
this.ctx.model.Article.findOne()
复制代码
this.ctx.model.Article.find(conditions,callback);
复制代码
condition有如下几种类型
this.ctx.model.Article.find({_id:5c4a819fb87ba4002a47bc4f,title:"123"},callback);
复制代码
"$lt" | 小于 |
---|---|
"$lte" | 小于等于 |
"$gt" | 大于 |
"$gte" | 大于等于 |
"$ne" | 不等于 |
this.ctx.model.Article.find({“sort”:{ $get:18 , $lte:30 });
复制代码
"$in" | 一个键对应多个值 |
---|---|
"$nin" | 同上取反, 一个键不对应指定值 |
"$or" | 多个条件匹配, 能够嵌套 $in 使用 |
"$not" | 同上取反, 查询与特定模式不匹配的文档 |
this.ctx.model.Article.find({"title":{ $in:[20,21,22."haha"]} );
复制代码
this.ctx.model.Article.find({"$or" : [ {"age":18} , {"name":"wxw"} ] });
复制代码
this.ctx.model.Article.find({name: {$exists: true}},function(error,docs){
//返回Article表中全部存在name属性的结果
});
复制代码
this.ctx.model.Article.find({telephone: {$exists: false}},function(error,docs){
//返回Article表中全部不存在telephone属性的结果
});
复制代码
MongoDb 是使用 Prel兼容的正则表达式库来匹配正则表达式
this.ctx.model.Article.find( {"name" : /joe/i } );
复制代码
this.ctx.model.Article.find({"array":10} );
复制代码
this.ctx.model.Article.find({"array[5]":10} );
复制代码
this.ctx.model.Article.find({"array":[5,10]});
复制代码
this.ctx.model.Article.find({"array":{$size : 3} });
复制代码
this.ctx.model.Article.find({"array":{$slice : 10} });
复制代码
this.ctx.model.Article.find({"array":{$slice : [5,10]} });
复制代码
用它能够执行任意javacript语句做为查询的一部分,若是回调函数返回 true 文档就做为结果的一部分返回
this.ctx.model.Article.find( {"$where" : "this.x + this.y === 10" } );
this.ctx.model.Article.find( {"$where" : " function(){ return this.x + this.y ===10; } " } )
复制代码
this.ctx.model.Article.remove(conditions,callback);
复制代码
备注:conditions为查询条件,与查询数据介绍的同样,eg:{ _id:5c4a819fb87ba4002a47bc4f },找到_id为5c4a819fb87ba4002a47bc4f的数据,callback为操做成功后的回调函数
this.ctx.model.Article.update(conditions, update, callback)
复制代码
备注:conditions与查询数据中介绍的同样
let post = {
wid: '5c492c57acbe363fd4824446',
column: [ '新闻' ],
titleHead: '',
img: '',
isAbstract: 'false',
}
this.ctx.model.Article.update({ _id: '5c4a819fb87ba4002a47bc4f ' }, post)
复制代码
update使用MondoDB的更新修改器,有如下几种使用场景
this.ctx.model.Article.update({"age":22}, {$inc:{"age":1} } );
复制代码
this.ctx.model.Article.update({ _id:5c4a819fb87ba4002a47bc4f }, { $set: { isDelete: true } });
复制代码
this.ctx.model.Article.update({age:22}, {$unset:{age:18} } );
复制代码
this.ctx.model.Article.update({name:'wxw'}, {$push:{array:10} } );
复制代码
this.ctx.model.Article.update({name:'wxw'},{$addToSet:{array:10} } );
复制代码
this.ctx.model.Article.update({name:'wxw'}, {$push:{array:{$each: [1,2,3,4,5]}} } );
复制代码
this.ctx.model.Article.update({name:'wxw'}, {$pop:{array:1} } );
复制代码
this.ctx.model.Article.update({name:'wxw'}, {$pull:{array:10} });
复制代码
this.ctx.model.Article.sort({ isSetTop: -1, sort: 1, editTime: -1 });
复制代码
备注:键对应数据中的键名,值表明排序方向,1 升序, -1降序。
this.ctx.model.Article.limit(3);
复制代码
this.ctx.model.Article.skip(3);
复制代码
附:综合使用最后三个方法进行分页查询
this.ctx.model.Article.find({ _id:5c4a819fb87ba4002a47bc4f }).skip(pageSize * (pageNum - 1)).limit(parseInt(pageSize)).sort({ isSetTop: -1, sort: 1, editTime: -1 });
复制代码