導讀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 });
複製代碼