《Mongo shell:最強(qiáng)大的 MongoDB 管理工具》要點(diǎn):
本文介紹了Mongo shell:最強(qiáng)大的 MongoDB 管理工具,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:非關(guān)系型數(shù)據(jù)庫(kù)
Mongo shell 是 MongoDB 的命令行管理工具,功能非常強(qiáng)大,最近社區(qū)很多人咨詢的一些問(wèn)題,比如
命令行看 json 格式比較吃力?
如何確定Secondary節(jié)點(diǎn)同步是否跟上?
怎么查看DB、集合使用了多少空間?
能否在shell 腳本里調(diào)用Mongo shell
怎么執(zhí)行 MongoDB 命令,比如創(chuàng)建集合、索引?
......
上述問(wèn)題都可以通過(guò) Mongo shell 來(lái)解決,而且Mongo shell能做的遠(yuǎn)不止這些.
語(yǔ)法糖
為了方便關(guān)系型數(shù)據(jù)庫(kù)的的用戶切換到 MongoDB 上能快速上手,mongo shell里做了一些語(yǔ)法上的兼容(最終還是通過(guò)調(diào)用 MongoDB 的命令實(shí)現(xiàn)的 ),例如
show dbs 列出所有DBuse dbname 切換當(dāng)前DBshow tables 或 show collections 列出當(dāng)前DB的所有表/集合show users 列出當(dāng)前DB的所有用戶show profile 列出當(dāng)前DB的所有慢查詢show logs 列出運(yùn)行日志
執(zhí)行命令
MongoDB的所有哀求都以命令的形式發(fā)出,支持的命令列表參考Database Commands
基本所有的driver都會(huì)實(shí)現(xiàn)一個(gè)通用的執(zhí)行命令的接口,然后再封裝出一些常用的接口(比如常用的CRUD操作),mongo shell 通過(guò) runCommand 接口來(lái)實(shí)現(xiàn)執(zhí)行命令,例如執(zhí)行 serverStatus 命令
* db.runCommand( { serverStatus: 1} )
mongo shell也對(duì)很對(duì)很多常用的命令進(jìn)行了封裝,讓用戶使用起來(lái)更簡(jiǎn)單.
常見(jiàn)的封裝接口包括
* db.serverStatus() 查看mongod運(yùn)行狀態(tài)信息* db.stats() 查看db元數(shù)據(jù)* db.collection.stats() 查看集合元數(shù)據(jù)* db.collection.insert() / update / remove / find 對(duì)集合增刪改查* db.collection.createIndex() 創(chuàng)建索引* db.collection.dropIndex() 刪除索引* db.dropDatabase() 刪除DB* db.printReplicationInfo()
文檔格式化輸出
很多同學(xué)在使用 mongo shell時(shí),覺(jué)得文檔輸出后可讀性差,比如
mongo-9555:PRIMARY> db.collection1.find() // 對(duì)集合調(diào)用find時(shí),默認(rèn)輸出前20個(gè)文檔{ "_id" : ObjectId("587ed6ce098a4da78d508468"), "name" : "jack", "age" : 18, "sex" : "male", "hobbies" : [ "football", "basketball" ], "contact" : { "phone" : "10000123456", "address" : "hangzhou", "zipcode" : "31000" } }
實(shí)際上,mongo shell 可以對(duì)cursor的輸出進(jìn)行格式化(pretty)輸出,JSON的文檔會(huì)被格式化輸出,可讀性很強(qiáng)
mongo-9555:PRIMARY> db.collection1.find().pretty()
mongo shell 里還可以通過(guò) printjson
來(lái)格式化輸出任意json對(duì)象,比如
mongo-9555:PRIMARY> printjson({ "_id" : ObjectId("587ed6ce098a4da78d508468"), "name" : "jack", "age" : 18, "sex" : "male", "hobbies" : [ "football", "basketball" ], "contact" : { "phone" : "10000123456", "address" : "hangzhou", "zipcode" : "310000000" } })
shell腳本調(diào)用
mongo shell 除了支持交互式的調(diào)用方式,還能支持執(zhí)行完一個(gè)或一批操作后自動(dòng)退出,這樣就能很方便的在shell 腳本里調(diào)用 mongo shell,比如獲取 MongoDB 各個(gè)命令備調(diào)用的次數(shù).
$ mongo --host localhost:27017 --eval "printjson( db.serverStatus().opcounters )"MongoDB shell version: 3.0.5connecting to: localhost:27017/test
如果要一次執(zhí)行很多個(gè) MongoDB 的操作,可以將操作寫(xiě)到文件里,然后使用 mongo shell 批量執(zhí)行
$cat test.jsdb = db.getSiblingDB("mydb") // 腳本里切換db的方式,相當(dāng)于use mydbfor (var i = 0; i < 100; i++) { db.collection.insert( {x: i} )
mongo shell 還提供『?jiǎn)?dòng)時(shí)執(zhí)行腳本』的機(jī)制,類(lèi)似與linux shell里的啟動(dòng)新的shell時(shí),執(zhí)行~/.bashrc等文件的機(jī)制.
只要將腳本寫(xiě)入 ~/.mongorc.js 文件里, mongo shell 啟動(dòng)時(shí),就會(huì)先執(zhí)行這個(gè)腳本,例如
$cat .mongorc.jsprint("Welcome, ZhangYoudong");
man 手冊(cè)
上述的命令,并不需要去記憶,跟使用 linux shell 一樣,需要用的時(shí)候看下 help 信息
* help* db.help()
除了上述功能,mongo shell 還提供了命令補(bǔ)全、命令歷史等很多實(shí)用的功能,只要習(xí)慣了使用mongo shell,根本無(wú)需再使用圖形界面來(lái)管理 MongoDB;當(dāng)然為了方便更多用戶,阿里云 MongoDB 云數(shù)據(jù)庫(kù) 不僅支持通過(guò)mongo shell 及 其他第三方圖形管理工具拜訪,還附帶一個(gè)DMS的數(shù)據(jù)庫(kù)管理系統(tǒng),供用戶免費(fèi)使用.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mongo shell:最強(qiáng)大的 MongoDB 管理工具》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10184.html