本系列的文章主要包含四个部分:
1、学习如何使用MongoDB shell进行CRUD操作
2、构建索引以及如何使用它们优化查询
3、掌握基本管理命令
4、使用MongoDB shell获取帮助
本篇文章的主要内容是掌握基本管理命令。
我们已经在前面两篇文章学习了基本的数据操作和索引。这里,我们将会介绍获取mongod进程信息的方法。例如,你可能想知道不同的集合占用的内存空间,或者集合中定义了多少索引。命令返回的信息可以帮助我们来诊断性能问题并且跟踪分析数据。
我们将了解一下MongoDB的命令接口。最特殊的就是,在MongoDB上执行的是非CRUD操作,从服务器状态检查到数据文件的完整性验证,都使用数据库命令来实现。
获取数据库信息
show dbs打印系统中所有数据库列表信息:
show collections展示了当前数据库里所有的集合:
db.stats()获取当前数据库的相关信息:
我们也可以在单个集合上执行stats()。
命令如何执行
MongoDB特定的操作集合---与本章目前为止介绍的CRUD命令不同---称为数据库命令。数据库命令通常是管理性的,正如刚才介绍的stats()方法,但是也可以控制MongoDB的核心功能,比如更新数据。
无论提供什么功能,所有的数据库命令实现都有个共同点,就是它们在一个叫做$cmd的虚拟集合上实现查询。我们先来看下面这个图:
以上两个执行方法的结果是一样的,通常我们可以通过runCommand方法传递参数来调用任意命令。我们还可以用runCommand方法调用集合的stats方法:
我们来看看低版本MongoDB(4以上版本的内部实现多了一层封装,并不直观)中runCommand方法的内部实现:
最后一行就是在$cmd集合上的查询。恰当的定义为数据库命令就是特殊集合上的查询,$cmd,查询选择器定义了命令本身。这就是背后原理。
根据以上代码我们可知其实db.runCommand({collstats:"numbers"})等价于db.$cmd.findOne({collstats:"numbers"})。至此,第三部分内容结束了。