mongodb想速成嗎,這個系列教程你能夠看看(2)

這個mongodb速成文章第二篇,第一篇最基礎的請看下面連接(但願給個贊哦,比心^^)mongodb

mongodb想速成嗎,這個系列教程你能夠看看(1)數據庫

一、經過配置項啓動數據庫

參數 含義
-dbpath 指定數據庫文件的目錄
--port 端口 默認是27017 28017
--fork 之後臺守護的方式進行啓動
--logpath 指定日誌文件輸出路徑
--config 指定一個配置文件
--auth 以安全方式啓動數據庫,默認不驗證

首先須要創建一個mongo.conf文件,經過文件來啓動mongodb服務器json

1.1 爲何要這麼作

把經常使用配置寫在一個文件裏,這樣不用每次都本身輸入參數,提升易維護性windows

1.2 mongo.conf

dbpath=F:\mongo\data
logpath=F:\mongo
port=50001
複製代碼

注意data目錄要提早建立好安全

1.3 啓動服務器

mongod --config mongo.conf
複製代碼

1.4 啓動客戶端

mongo --port 50001
複製代碼

二、 導入導出數據

這命令是保存成了文件格式bash

  • mongoimport 導出數據
  • mongoexport 導入數據
參數 含義
-h [ --host ] 鏈接的數據庫
--port 端口號
-u 用戶名
-p 密碼
-d 導出的數據庫
-d 導出的數據庫
-c 指定導出的集合
-o 導出的文件存儲路徑
-q 進行過濾

2.1 準備數據

use c1;
var data =[
 {name: "mx0", index: 0},
 {name: "mx1", index: 1},
 {name: "mx2", index: 2},
 {name: "mx3", index: 3},
 {name: "mx4", index: 4},
 {name: "mx5", index: 5},
 {name: "mx6", index: 6},
 {name: "mx7", index: 7},
 {name: "mx8", index: 8},
 {name: "mx9", index: 9}
];
db.c1.insert(data);
db.c1.find();
複製代碼

2.2 備份記錄

mongoexport -h 127.0.0.1 --port 50001  -d c1 -c c1 -o c1.bak
複製代碼

2.3 刪除記錄

db.c1.remove({});
db.c1.find()
複製代碼

2.4 導入記錄 這時候再把數據導入進來

mongoimport -h 127.0.0.1 --port 50001 -d c1 -c c1 --file c1.bak
複製代碼

三、 備份與恢復

3.1 備份和上面的導出數據有什麼區別

上面導出數據只能導出json格式的,但有時候咱們的mongodb會存2進制的數據,這個時候json不支持這種數據類型,因此須要咱們接下來的這種方式來導出數據。服務器

3.1 mongodump

在Mongodb中咱們使用mongodump命令來備份MongoDB數據。該命令能夠導出全部數據到指定目錄中。架構

mongodump -h dbhost -d dbname -o dbdirectory
複製代碼
- -
-h MongDB所在服務器地址,例如:127.0.0.1,固然也能夠指定端口號:127.0.0.1:27017
-d 須要備份的數據庫實例,例如:test
-o 備份的數據存放位置
mongodump -h 127.0.0.1:50001 -d c1 -o c1.dmp
複製代碼

3.2 mongorestore mongodb使用 mongorestore 命令來恢復備份的數據。

--host MongoDB所在服務器地址 --db -d 須要恢復的數據庫實例 最後的一個參數,設置備份數據所在位置 mongorestore data.dmpapp

mongorestore -h 127.0.0.1:50001 -d c2 c1.dmp/c1
複製代碼

五、 鎖定和解鎖數據庫

爲了數據的完整性和一致性,導出前要先鎖定寫入,導出後再解鎖。post

> use admin;
switched to db admin
> db.runCommand({fsync:1,lock:1});
{
        "info" : "now locked against writes, use db.fsyncUnlock() to unlock",
        "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
        "ok" : 1
}
> db.fsyncUnlock();
{ "ok" : 1, "info" : "unlock completed" }
複製代碼

首先會把緩衝區數據暴力刷入硬盤,而後給數據庫一個寫入鎖,其餘實例的寫入操做所有被阻塞,直到fsync+lock釋放鎖爲止

6. 用戶管理

6.1 查看角色

show roles;
複製代碼

內置角色

- -
數據庫用戶角色 read、readWrite
數據庫管理角色 dbAdmin、dbOwner、userAdmin
集羣管理角色 clusterAdmin、clusterManager、clusterMonitor、hostManage
全部數據庫角色 readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶角色 root
內部角色 __system

6.2 建立用戶的方法

use admin;
db.createUser({user:'mx',pwd:'123456',roles:[{role:'read',db:'c1'}]});
複製代碼

6.3 查看用戶的權限

db.runCommand({usersInfo:'mx',showPrivileges:true});
複製代碼

6.4 服務器啓動權限認證

mongod --dbpath=F:\data --auth
複製代碼

6.5 用戶登陸和修改密碼

use admin;
db.auth('mx','123456')

db.changeUserPassword('mx2','123');
db.auth('mx2','123')
複製代碼

7. 數據庫高級命令

7.1 準備數據

var c1 = [
        {provience:'北京',home:'北京',age:1},
        {provience:'北京',home:'北京',age:2},
        {provience:'北京',home:'北京',age:3},
        {provience:'廣東',home:'廣州',age:1},
        {provience:'廣東',home:'佛山',age:2},
        {provience:'廣東',home:'東莞',age:3}
]
db.c1.insert(c1);
複製代碼

7.2 count

查看記錄數

db.c1.find().count();
複製代碼

7.3 查找不重複的值

distinct

db.runCommand({distinct:'c1',key:'home'}).values;
// [ "北京", "廣東" ]
複製代碼

7.3 group 分組

db.runCommand({
        group:{
                ns:集合名稱,
                key:分組的鍵,
                initial:初始值,
                $reduce:分解器
                query:條件,
                finalize:完成時的處理器
        }
});
複製代碼

7.3.1 按城市分組

db.runCommand({
	group: {
		ns: 'c1',
		key: { provience:1 },
		query: {age:{$gt:1}},
		initial: {total: 0},
		$reduce:function(doc, initial){
			initial.total+=doc.age
		}
	}
})
複製代碼

7.4 刪除集合

db.runCommand({drop:'c1'});
複製代碼

7.5 runCommand經常使用命令

db.runCommand({buildInfo:1});
複製代碼

能夠看見有操做系統信息是windows,架構師x86_64,等等系統的信息

db.runCommand({getLastError:"c1"});
複製代碼

8. 什麼固定集合

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,對於大小固定,咱們能夠想象其就像一個環形隊列,當集合空間用完後,再插入的元素就會覆蓋最初始的頭部的元素!

8.1 特性

  • 沒有索引
  • 插入和查詢速度速度很是快 不須要從新分配空間
  • 特別適合存儲日誌

8.2 建立固定集合

  • 咱們經過createCollection來建立一個固定集合,且capped選項設置爲true:
  • 還能夠指定文檔個數,加上max:1000屬性:
  • 判斷集合是否爲固定集合: db.logs.isCapped()
  • size 是整個集合空間大小,單位爲【KB】
  • max 是集合文檔個數上線,單位是【個】
  • 若是空間大小到達上限,則插入下一個文檔時,會覆蓋第一個文檔;若是文檔個數到達上限,一樣插入下一個文檔時,會覆蓋第一個文檔。兩個參數上限判斷取的是【與】的邏輯。
  • capped 封頂的
db.createCollection('logs',{size:50,max:5,capped:true});
複製代碼

8.3 非固定集合轉爲固定集合

db.runCommand({convertToCapped:"logs",size:5});
複製代碼

9. gridfs

  • gridfs是mongodb自帶的文件系統,使用二進制存儲文件。
  • mongodb能夠以BSON格式保存二進制對象。
  • 可是BSON對象的體積不能超過4M。因此mongodb提供了mongofiles。它能夠把一個大文件透明地分割成小文件(256K),從而保存大致積的數據。
  • GridFS 用於存儲和恢復那些超過16M(BSON文件限制)的文件(如:圖片、音頻、視頻等)。
  • GridFS 用兩個集合來存儲一個文件:fs.files與fs.chunks。
  • 每一個文件的實際內容被存在chunks(二進制數據)中,和文件有關的meta數據(filename,content_type,還有用戶自定義的屬性)將會被存在files集合中。

9.1 上傳一個文件

- -
-d 數據庫的名稱
-l 源文件的位置
put 指定文件名
// test.txt必須建立在當前目錄
mongofiles -d myfiles put test.txt
複製代碼

9.2 獲取並下載文件

mongofiles -d myfiles  get 'test.txt'
複製代碼

9.3 查看全部文件

mongofiles -d myfiles  list
>db.fs.files.find()
>db.fs.chunks.find()
複製代碼

9.4 刪除文件

mongofiles -d myfiles delete "test.txt"
複製代碼
相關文章
相關標籤/搜索