日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本

發(fā)布時間:2024/7/19 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

數(shù)據(jù)庫命令

固定大小的集合

GridFS存儲大文件

MongoDB對服務(wù)端JavaScript的支持

數(shù)據(jù)庫命令

命令的原理

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

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

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

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

當(dāng)MongoDB服務(wù)器得到查詢$cmd集合的請求時,會啟動一套特殊的邏輯來處理,而不是交給普通的查詢代碼來執(zhí)行。

有些 命令的訪問需要管理員權(quán)限,必須在admin數(shù)據(jù)庫里運(yùn)行。否則會得到“拒絕訪問”的錯誤。

常見命令列表

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

buildInfo:返回MongoDB服務(wù)器的版本號和主機(jī)的操作系統(tǒng)等信息

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

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

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

distinct:返回指定集合中滿足查詢條件的指定鍵的所有不同的值

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

drop:刪除指定集合

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

dropDatabase:刪除db指向的數(shù)據(jù)庫,

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

dropIndexes:刪除集合中指定名稱的索引,名稱為*時刪除全部。

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

findAndModify:返回已更新的文檔

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

getLastError:返回對本集合執(zhí)行的最后一次操作的錯誤信息或者其他狀態(tài)信息。

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

isMaster:檢測本服務(wù)器是否為主服務(wù)器

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

listCommands:返回所有可以在服務(wù)器上運(yùn)行的命令及相關(guān)信息

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

listDatabases:列出服務(wù)器上所有的數(shù)據(jù)庫,與show dbs結(jié)果類似,管理員專用

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

ping:檢測服務(wù)器連接是否正常

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

renameCollection:重命名集合

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

repairDatabase:修復(fù)并壓縮當(dāng)前數(shù)據(jù)庫,db指向的數(shù)據(jù)庫

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

serverStatus:返回本服務(wù)器的管理統(tǒng)計信息

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

固定集合

固定集合需要實現(xiàn)創(chuàng)建且大小固定(文檔數(shù)量、容量)。插入文檔時,若還有空間,則在尾部插入,否則最早的文檔會被刪除。默認(rèn)情況下,固定集合是沒有索引的,即便是”_id”.

1)特點(diǎn)

對固定集合進(jìn)行插入速度快,插入實際上就是簡單的memcpy(內(nèi)存復(fù)制);文檔本身按照插入的順序存儲;空間不夠時,自動淘汰最早的數(shù)據(jù)。

2)創(chuàng)建固定集合

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

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

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

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

當(dāng)指定文檔數(shù)量上限時,必須同時指定大小。淘汰機(jī)制只有在容量還沒滿時才會依據(jù)文檔數(shù)量來工作。要是容量滿了,會依據(jù)容量來工作。

3)自然排序

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

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

4)尾部游標(biāo)

尾部游標(biāo)是一種特殊的持久游標(biāo),不會在沒有結(jié)果后銷毀,只能用在固定集合上。

GridFS:存儲大文件

GridFS是MongoDB中存儲大二進(jìn)制文件的機(jī)制,其特點(diǎn)有如下幾方面:

可以簡化需求,不需要使用獨(dú)立文件存儲架構(gòu);直接利用已經(jīng)建立的復(fù)制或分片機(jī)制,便于故障恢復(fù)和擴(kuò)展;避免用于存儲用戶上傳內(nèi)容的文件系統(tǒng)出現(xiàn)問題;不產(chǎn)生磁盤碎片。

使用GridFS:mongofiles

利用mongofiles應(yīng)用程序,可以用來在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]:指定上傳的主機(jī)地址,默認(rèn)localhost

--port:指定上傳的端口號,默認(rèn)27017

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

-p[--password]:指定對應(yīng)的密碼

--dbpath:指定數(shù)據(jù)文件存放路徑

-d[--db]:指定使用的數(shù)據(jù)庫

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

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

內(nèi)部原理

GridFS是一個建立在普通MongoDB文檔基礎(chǔ)上的輕量級文件存儲規(guī)范。其思想是將大文件分成很多塊,每塊作為一個單獨(dú)的文檔存儲,除了存儲文件本身的塊,還有一個單獨(dú)的文檔用來存儲分塊的信息和文件的元數(shù)據(jù)。

默認(rèn)情況下,塊使用對應(yīng)數(shù)據(jù)庫(沒有指明時是test數(shù)據(jù)庫)的fs.chunks集合。文件的元數(shù)據(jù)放在fs.files(默認(rèn))集合下。

服務(wù)器端腳本

在服務(wù)端可以通過db.eval()來執(zhí)行javascript腳本,也可以將javascript腳本保存在數(shù)據(jù)庫中,然后在別的數(shù)據(jù)庫命令中調(diào)用。

1)db.eval()

該函數(shù)可以在服務(wù)端執(zhí)行任意javascript代碼,先將給定的javascript字符串發(fā)生給MongoDB,然后返回結(jié)果。

>db.eval("return 1;")

參數(shù)可以通過eval的第二個參數(shù)指定,需寫成數(shù)組的形式。

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

2)存儲javascript

每個數(shù)據(jù)庫都有一個特殊的集合,叫做system.js,用來存放javascript變量,這些變量可以在任何MongoDB的javascript上下文中調(diào)用。

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

轉(zhuǎn)載于:https://www.cnblogs.com/Jxwz/p/4188342.html

總結(jié)

以上是生活随笔為你收集整理的MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。