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