MongoDB學習筆記-06 數據庫命令、固定集合、GridFS、javascript腳本

介紹MongoDB支持的一些高級功能: javascript

數據庫命令 java

固定大小的集合 數據庫

GridFS存儲大文件 數組

MongoDB對服務端JavaScript的支持 服務器

數據庫命令

命令的原理 架構

MongoDB中的命令實際上是做爲一種特殊類型的查詢來實現的,這些查詢針對$cmd集合來執行。runCommand僅僅是接受命令文檔,執行等價查詢。 app

>db.runCommand({"drop":"test"}) 函數

clip_image001

上面的命令等價於下面的查詢: ui

>db.$cmd.findOne({"drop":"test"}) 操作系統

當MongoDB服務器獲得查詢$cmd集合的請求時,會啓動一套特殊的邏輯來處理,而不是交給普通的查詢代碼來執行。

有些 命令的訪問須要管理員權限,必須在admin數據庫裏運行。不然會獲得「拒絕訪問」的錯誤。

常見命令列表

可使用db.listCommand()列出MongoDB支持的全部命令。常常使用的命令以下:

buildInfo:返回MongoDB服務器的版本號和主機的操做系統等信息

>db.runCommand({"buildInfo":1})

clip_image003

collStats:返回指定集合的統計信息,包括數據大小、已分配的存儲空間和索引大小。

>db.runCommand({"collStats":"collectionName"})

clip_image004

distinct:返回指定集合中知足查詢條件的指定鍵的全部不一樣的值

>db.runCommand({"distinct":"collectionName","key":"keyName","query":query})

drop:刪除指定集合

>db.runCommand({"drop":"collectionName"})

dropDatabase:刪除db指向的數據庫,

>db.runCommand({"dropDatabase":1})

dropIndexes:刪除集合中指定名稱的索引,名稱爲*時刪除所有。

>db.runCommand({"dropIndexes":"collectionName","index":"indexName"})

findAndModify:返回已更新的文檔

>db.runCommand({"findAndModify":"collectionName","query":query, "sort":sort, "update":update})

getLastError:返回對本集合執行的最後一次操做的錯誤信息或者其餘狀態信息。

>db.runCommand({"getLastError":1})

isMaster:檢測本服務器是否爲主服務器

>db.runCommand({"isMaster":1})

listCommands:返回全部能夠在服務器上運行的命令及相關信息

>db.runCommand({"listCommands":1})

listDatabases:列出服務器上全部的數據庫,與show dbs結果相似,管理員專用

>db.runCommand({"listDatabases":1})

ping:檢測服務器鏈接是否正常

>db.runCommand({"ping":1})

renameCollection:重命名集合

>db.runCommand({"renameCollection":a, "to":b})

repairDatabase:修復並壓縮當前數據庫,db指向的數據庫

>db.runCommand({"repairDatabase":1})

serverStatus:返回本服務器的管理統計信息

>db.runCommand({"serverStatus":1})

固定集合

固定集合須要實現建立且大小固定(文檔數量、容量)。插入文檔時,若還有空間,則在尾部插入,不然最先的文檔會被刪除。默認狀況下,固定集合是沒有索引的,即使是」_id」.

1)特色

對固定集合進行插入速度快,插入實際上就是簡單的memcpy(內存複製);文檔自己按照插入的順序存儲;空間不夠時,自動淘汰最先的數據。

2)建立固定集合

固定集合必須在使用前顯示建立,使用createCollection()方法來建立:

>db.createCollection("collectionName",{"capped":true,size:10000,max:100})

size:指定集合的存儲空間,單位字節

max:指定文檔的數量(可選)。

當指定文檔數量上限時,必須同時指定大小。淘汰機制只有在容量還沒滿時纔會依據文檔數量來工做。要是容量滿了,會依據容量來工做。

3)天然排序

天然順序就是文檔在磁盤上的順序。固定集合的文檔老是按照插入的順序存儲的,天然順序與此相同,也可使用天然排序按照反方向插入的順序查詢:

>db.my_collection.find().sort({"$natural":-1})

4)尾部遊標

尾部遊標是一種特殊的持久遊標,不會在沒有結果後銷燬,只能用在固定集合上。

GridFS:存儲大文件

GridFS是MongoDB中存儲大二進制文件的機制,其特色有以下幾方面:

能夠簡化需求,不須要使用獨立文件存儲架構;直接利用已經創建的複製或分片機制,便於故障恢復和擴展;避免用於存儲用戶上傳內容的文件系統出現問題;不產生磁盤碎片。

使用GridFS:mongofiles

利用mongofiles應用程序,能夠用來在GridFS中上傳、下載、列示、查看或刪除文件。使用mongofiles --help查看全部選項。

基本用法是:mongofiles [options] command [gridfs filename]

命令有以下選擇:list(列示)、search(查看)、put(上傳)、get(下載)、delete(刪除)

>mongofiles put E:\MongoDB\dbData\UploadTest.txt

>mongofiles list

>mongofiles get E:\MongoDB\dbData\UploadTest.txt

選項有以下的選擇:

-h[--host]:指定上傳的主機地址,默認localhost

--port:指定上傳的端口號,默認27017

-u[--username]:指定用戶名

-p[--password]:指定對應的密碼

--dbpath:指定數據文件存放路徑

-d[--db]:指定使用的數據庫

-c[--collection]:指定使用的集合

-l[--local]:上傳/下載時的本地文件名,默認與gridfs上的文件名一致

內部原理

GridFS是一個創建在普通MongoDB文檔基礎上的輕量級文件存儲規範。其思想是將大文件分紅不少塊,每塊做爲一個單獨的文檔存儲,除了存儲文件自己的塊,還有一個單獨的文檔用來存儲分塊的信息和文件的元數據。

默認狀況下,塊使用對應數據庫(沒有指明時是test數據庫)的fs.chunks集合。文件的元數據放在fs.files(默認)集合下。

clip_image006

clip_image007

服務器端腳本

在服務端能夠經過db.eval()來執行javascript腳本,也能夠將javascript腳本保存在數據庫中,而後在別的數據庫命令中調用。

1)db.eval()

該函數能夠在服務端執行任意javascript代碼,先將給定的javascript字符串發生給MongoDB,而後返回結果。

>db.eval("return 1;")

參數能夠經過eval的第二個參數指定,需寫成數組的形式。

>db.eval("function(u){print(’hello,’+u);}",[ "wangdh"])

2)存儲javascript

每一個數據庫都有一個特殊的集合,叫作system.js,用來存放javascript變量,這些變量能夠在任何MongoDB的javascript上下文中調用。

>db.system.js.insert({"_id":"username","value":"wangdh"})

clip_image008

system.js還能夠用來存放javascript代碼

>db.system.js.insert({"_id":"log","value":function(msg,level){

var levels=["DEBUG","WARN","ERROR","FATAL"];

level=level?level:0;

var now=new Date();

print(now+" "+levels[level]+msg);

}})

>db.eval("x=1;log(‘x is ’+x,1)")

相關文章
相關標籤/搜索