MongoDB學習筆記06

來源:互聯網
上載者:User

標籤:

在shell中刪除一個集合,執行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其實是作為一種特殊類型的查詢來實現的,這些查詢針對$cmd集合來執行,runCommand僅僅是接受命令文檔,執行等價查詢,因此drop調用實際是這樣的:

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

db.listCommands() 列出所有的命令

MongoDB支援固定集合,要事先建立,而且大小固定,固定集合很像環形隊列,如果空間不足,最早的文檔就會被刪除,為新的文檔騰出空間。固定集合在預設情況下沒有索引,即便是"_id"上也沒有索引。

建立固定集合可以使用createCollection來建立

 db.createCollection("my_collection",{capped:true,size:1000})

可以將普通集合轉為固定集合

db.runCommand({"convertToCapped":"my_collection",size:1000} )

固定集合有種特殊的排序方式即自然排序,自然順序就是文檔在磁碟上的順序,因為固定集合的文檔總是按照插入的順序儲存的,自然順序就是與此相同。也可以按照反洗插入的順序查詢,如下:

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

使用{"$natural":1}表示與預設順序相同,非固定集合不能保證文檔按照特定順序儲存,所以自然順序的意義不大。

尾部遊標是一種特殊的持久遊標,這類遊標不會在沒有結果後銷毀,一旦有新文檔添加到集合裡就會被取回並輸出,尾部遊標只能用在固定集合上。【MongoDB shell不支援尾部遊標】

GridFS是一種在MongoDB中儲存大二進位檔案的機制

PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe search foo2015-04-07T13:31:03.326+0800    connected to: localhostPS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe put foo.txt2015-04-07T13:31:17.425+0800    connected to: localhostadded file: foo.txtPS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe get foo.txt2015-04-07T13:31:24.541+0800    connected to: localhostfinished writing to: foo.txtPS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe delete foo.txt2015-04-07T13:31:33.263+0800    connected to: localhostsuccessfully deleted all instances of ‘foo.txt‘ from GridFS

GridFS是一個建立在普通MongoDB文檔基礎上的輕量級儲存規範,MongoDB伺服器對GridFS請求沒有什麼特別照顧,所有相關工作都由用戶端驅動或者工具完成。GridFS的一個基本思想就是可以將大檔案分成很多小塊,每塊作為一個單獨的文檔儲存,這樣就能儲存大檔案了,除了隱藏檔本身的塊,還有一個單獨文檔用來儲存塊的資訊和檔案的中繼資料。

GridFS的塊有個單獨的集合,預設情況下,塊將使用fs.chunks集合

fs.chunks裡邊的結構如下:

{

    "_id" ,塊的唯一ID

    "n",  塊的編號即這個塊在原檔案中的順序編號

   "data",包含組成檔案塊的位元據

     "files_id"  包含這個塊中繼資料的檔案文檔的"_id"

}

檔案的中繼資料放在另一個集合中,預設是fs.files,這裡邊的每個文檔代表GridFS中的一個檔案,與檔案相關的自訂中繼資料也可以存在其中,除了使用者自訂的鍵,GridFS規範還定義了一些鍵。

_id 檔案唯一id,在塊中作為“files_id”鍵的值儲存

length 檔案中內容總的位元組數

chunkSize 每塊的大小,位元組為單位,預設256K,必要時可以調整

uploadData 檔案存入GridFS的時間戳記

md5 檔案內容的md5校正和,由伺服器端產生

 

在伺服器端可以通過db.eval函數執行JavaScript指令碼

> db.eval("return 1;")1> db.eval("function(){return 1;}")1> db.eval("function(a,b){return a+b;}",1,2)3

每個MongoDB的資料庫中都有一個特殊的集合system.js,用來存放JavaScript變數,這些變數可以在任何MongoDB的JavaScript上下文中調用。

> db.system.js.find()> db.system.js.insert({"_id":"x","value":1})WriteResult({ "nInserted" : 1 })> db.system.js.insert({"_id":"y","value":2})WriteResult({ "nInserted" : 1 })> db.system.js.insert({"_id":"z","value":3})WriteResult({ "nInserted" : 1 })> db.eval("return x+y+z;")6> db.system.js.find(){ "_id" : "x", "value" : 1 }{ "_id" : "y", "value" : 2 }{ "_id" : "z", "value" : 3 }

使用儲存的JavaScript缺點就是代碼會與常規的原始碼控制脫離,會攪亂用戶端發送來的JavaScript,最適合使用儲存JavaScript的情況就是程式中有多個地方都要用到一個JavaScript函數,將這樣的函數放置在中心位置,要是有更新的話就可以不必每處都修改。

DBRef(資料庫引用)就像URL,唯一確定一個到文檔的引用。

DBRef是個內嵌文檔,但是DBRef有些必選鍵"$ref"、"$id"可選鍵"$db"

DBRef中鍵的順序不能改變,第一個必須是"$ref",接著是"$id",然後是(可選的)"$db"

{"$ref":collection,"$id":id_value,"$db":database}

collection:指向一個集合

id_value:集合雷根據"_id"確定唯一的文檔

database:資料庫

> db.user.find()> db.users.find(){ "_id" : "mike", "display_name" : "Mike D" }{ "_id" : "kristina", "display_name" : "Kristina C" }> db.nodes.insert({"_id":20,"author":"kristina","text":"... and DBRefs are easy,too", "references":[{"$ref":"users","$id":"mike"}, {"$ref":"nodes","$id":5}]})WriteResult({ "nInserted" : 1 })> db.nodes.insert({"_id":5,"author":"mike","text":"MongoDB is fun!"})WriteResult({ "nInserted" : 1 })> var note=db.nodes.findOne({"_id":20})> note.references.forEach(function(ref){  printjson(db[ref.$ref].findOne({"_id":ref.$id})); }){ "_id" : "mike", "display_name" : "Mike D" }{ "_id" : 5, "author" : "mike", "text" : "MongoDB is fun!" }

 

MongoDB學習筆記06

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.