Mongo shell:最强大的 MongoDB 管理工具

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。

基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。

Mongo shell 是 MongoDB 的命令行管理工具,功能非常强大,最近社区很多人咨询的一些问题,比如

  • 命令行看 json 格式比较吃力?
  • 如何确定Secondary节点同步是否跟上?
  • 怎么查看DB、集合使用了多少空间?
  • 能否在shell 脚本里调用Mongo shell
  • 怎么执行 MongoDB 命令,比如创建集合、索引?
  • ......

上述问题都可以通过 Mongo shell 来解决,而且Mongo shell能做的远不止这些。

语法糖

为了方便关系型数据库的的用户切换到 MongoDB 上能快速上手,mongo shell里做了一些语法上的兼容(最终还是通过调用 MongoDB 的命令实现的 ),例如

show dbs     列出所有DB
use dbname   切换当前DB
show 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() 
* db.printSlaveReplicationInfo()                   查看复制集同步信息
* rs.status()                                      查看复制集当前状态
* rs.conf()                                        查看复制集配置
* rs.initiate()                                    初始化复制集
* rs.reconfig()                                    重新配置复制集
* rs.add() / rs.remove()                           增加/删除复制集节点  
* sh.enableSharding()                              对DB启用分片
* sh.shardCollection()                             对集合进行分片
* sh.status()                                      查看sharding状态信息
* ...

文档格式化输出

很多同学在使用 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()
{
    "_id" : ObjectId("587ed6ce098a4da78d508468"),
    "name" : "jack",
    "age" : 18,
    "sex" : "male",
    "hobbies" : [
        "football",
        "basketball"
    ],
    "contact" : {
        "phone" : "10000123456",
        "address" : "hangzhou",
        "zipcode" : "31000"
    }
}

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" } })
{
    "_id" : ObjectId("587ed6ce098a4da78d508468"),
    "name" : "jack",
    "age" : 18,
    "sex" : "male",
    "hobbies" : [
        "football",
        "basketball"
    ],
    "contact" : {
        "phone" : "10000123456",
        "address" : "hangzhou",
        "zipcode" : "31000"
    }
    

shell脚本调用

mongo shell 除了支持交互式的调用方式,还能支持执行完一个或一批操作后自动退出,这样就能很方便的在shell 脚本里调用 mongo shell,比如获取 MongoDB 各个命令备调用的次数。

$ mongo --host localhost:27017 --eval "printjson( db.serverStatus().opcounters )"
MongoDB shell version: 3.0.5
connecting to: localhost:27017/test
{
    "insert" : 2,
    "query" : 13,
    "update" : 0,
    "delete" : 0,
    "getmore" : 74191,
    "command" : 104198
}

如果要一次执行很多个 MongoDB 的操作,可以将操作写到文件里,然后使用 mongo shell 批量执行

$cat test.js
db = db.getSiblingDB("mydb")   // 脚本里切换db的方式,相当于use mydb
for (var i = 0; i < 100; i++) {
    db.collection.insert( {x: i}  )

}
printjson( {db.collection.count()}  )


$ mongo --host localhost:27017 test.js
MongoDB shell version: 3.0.5
connecting to: localhost:27017/test
100

mongo shell 还提供『启动时执行脚本』的机制,类似与linux shell里的启动新的shell时,执行~/.bashrc等文件的机制。

只要将脚本写入 ~/.mongorc.js 文件里, mongo shell 启动时,就会先执行这个脚本,例如

$cat .mongorc.js
print("Welcome, ZhangYoudong");

然后每次登录mongo shell时,这个文件的js脚本就会被执行

$ mongo --host localhost:27017
MongoDB shell version: 3.0.5
connecting to: localhost:27017/test
Welcome, ZhangYoudong
> 

man 手册

上述的命令,并不需要去记忆,跟使用 linux shell 一样,需要用的时候看下 help 信息

* help
* db.help()
* rs.help()
* sh.help() 
* db.collection.find().help()
* help misc

除了上述功能,mongo shell 还提供了命令补全、命令历史等很多实用的功能,只要习惯了使用mongo shell,根本无需再使用图形界面来管理 MongoDB;当然为了方便更多用户,阿里云 MongoDB 云数据库 不仅支持通过mongo shell 及 其他第三方图形管理工具访问,还附带一个DMS的数据库管理系统,供用户免费使用。

基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
NoSQL MongoDB PHP
MongoDB 管理工具: Rockmongo
10月更文挑战第24天
49 1
MongoDB 管理工具: Rockmongo
|
2月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
161 7
|
3月前
|
NoSQL Shell MongoDB
MongoDB Shell
10月更文挑战第11天
43 0
|
4月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
815 2
|
4月前
|
存储 NoSQL Shell
02 MongoDB数据类型、重要概念以及shell常用指令
文章详细解释了MongoDB中的数据类型、重要概念,并提供了常用的MongoDB Shell操作指令,帮助用户更好地管理和操作MongoDB数据库。
62 0
02 MongoDB数据类型、重要概念以及shell常用指令
|
5月前
|
Shell Linux 数据处理
Shell文本处理秘籍:掌握这11种工具,让数据处理如虎添翼!
在Linux信息环境,文本数据处理是一项基础而重要的技能。对于广大Linux用户而言,掌握Shell环境下的文本处理工具不仅能提高工作效率,还能在面对复杂数据时游刃有余。 本文将介绍,那些在文本处理中不可或缺的`11`种命令工具,让数据处理技能更上一层楼。
|
6月前
|
Shell Linux C语言
|
6月前
|
Shell 网络安全 UED
|
7月前
|
NoSQL Linux MongoDB
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
138 6
|
7月前
|
NoSQL 数据可视化 关系型数据库
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
62 3

相关产品

  • 云数据库 MongoDB 版