MongoDB學習筆記-06 資料庫命令、固定集合、GridFS、javascript指令碼

來源:互聯網
上載者:User

標籤:

介紹MongoDB支援的一些進階功能:

資料庫命令

固定大小的集合

GridFS儲存大檔案

MongoDB對服務端JavaScript的支援 資料庫命令

命令的原理

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

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

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

>db.$cmd.findOne({"drop":"test"})

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

有些 命令的訪問需要管理員權限,必須在admin資料庫裡運行。否則會得到“拒絕訪問”的錯誤。

常見命令列表

可以使用db.listCommand()列出MongoDB支援的所有命令。經常使用的命令如下:

buildInfo:返回MongoDB伺服器的版本號碼和主機的作業系統等資訊

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

collStats:返回指定集合的統計資訊,包括資料大小、已指派的儲存空間和索引大小。

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

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(預設)集合下。

伺服器端指令碼

在服務端可以通過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"})

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)")

MongoDB學習筆記-06 資料庫命令、固定集合、GridFS、javascript指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.