该篇博文主要讲解下MongoDB的连接、配置、管理工具MongoDB shell 以及MongoDB官方提供的一个图形工具MongoDB Compass
MongoDB shell
1.MongoDB shell 连接
MongoDB shell 是MongoDB自带的一个交互式的JavaScript shell,我们可以使用MongoDB shell 来访问、配置、管理MongoDB数据库。可以说使用MongoDB shell ,我们可以管理MongoDB的一切。
我们想要使用MongoDB shell 我们首先需要启动MongoDB。然后我们进入到MongoDB安装目录的bin目录下,然后输入MongoDB shell 的连接命令,其命令格式为:
windows
mongo [ip][:port][/database] [--username "username" --password "password"]
Linux
./mongo [ip][:port][/database] [--username "username" --password "password"]
注:不要把这个命令和启动MongoDB的命令混淆了,一个是mongod一个是mongo
-
上面的命令中使用 [ ] 括起来的部分都是可以省略的,
- 其中ip 是要连接的数据库所在的ip地址,若不填 则默认localhost 即127.0.0.1。
- 其中port 是要连接的数据库的端口号,若不填,则默认27017.
- 其中/database,是要连接的MongoDB数据库的哪一个数据库,如果不填,则默认连接test数据库
- 其中[–username “username” –password “password”] ,则是如果数据库在启动的时候使用–auth 开启了身份验证,则需要输入用户名和密码,这个后面会讲到。
- 当然连接命令还有其他的属性,这里就不说了,比如直接运行js文件等。
我们可以连接一下,如下图所示:
2. MongoDB shell 命令
shell 提供了几个以后会经常使用的命令:
命令 | 描述 |
---|---|
help | 显示MonogoDB shell命令的语法帮助,option可以是db、collection、cursor等 |
use | 修改当前位于的数据库位置(句柄),若想使用哪个数据库,我们首先需要使用use命令切换到对应的数据库 |
show | 根据option显示对应的列表,option取值为:dbs(数据库列表)、collections(集合列表)、users(显示当前数据库中的用户列表)、profile(显示system.profile中时间超过1毫秒的条目) |
log[name] | 显示内存中日志的最后一部分。如果没有指定日志名,默认为global |
exit | 退出MongoDB shell |
这里就不在验证这些命令了。
MongoDB shell 原生方法
MongoDB shell 提供了很多用于执行管理的原生方法,我们可以在MongoDB shell中直接调用,我们也可以在js文件中直接调用,然后使用shell执行js文件即可。如下所示(下方仅仅列出其中一小部分,若需要看全部方法,可以点击这里):
-
Date()
- 若直接使用Date(),则直接放回当前日期字符串.
-
若使用new Date([option]),则shell会使用ISODatehelper来包装成指定日期对象,可传类型如下:
1. new Date(“YYYY-mm-dd”):返回指定日期的ISODate
2. new Date(“YYYY-mm-ddTHH:MM:ss”):返回shell客户端当前时区的指定时间的ISODate格式
的时间。
3. new Date(“YYYY-mm-ddTHH:MM:ssZ”):返回指定时间的UTC时间的ISODate格式的时间
specifies the datetime in UTC and returns theISODatewith the specified datetime in UTC.
4. new Date(integer):返回从1970年1月1日到指定的毫秒数的ISODate格式的时间。
UUID(hex_string)
- 将32字节的十六进制字符串抓换成BSON子类型的UUID ObjectId.valueOf()
- 讲一个ObjectId的属性str显示为十六进制字符串 Mongo.getDB(database)
- 返回一个数据库对象,它标识指定的数据库 Mongo(host:port)
- 创建一个连接对象,它连接到指定的主机和端口 connect(string)
- 连接到指定MongoDB实例中的指定数据库,返回一个数据库对象,string的格式如:host:port/database,如db = connect(“localhost:27017/test”),该语法等同于Mongo(host:port).getDB(database) cat(path)
- 与linux差不多,返回指定路径的文件的内容 version()
- 返回当前MongoDB shell的版本 cd(path)
- 将工作目录切换到指定路径 getMemInfo()
- 返回当前shell占用的内存量 hostname()
- 返回运行当前MongoDB shell 的系统的主机名 load(path)
- 在shell中加载并运行参数path指定的js文件 _rand()
- 返回一个0~1的随机数
MongoDB shell 是一个交互式的JavaScript shell,与MongoDB数据结构紧密相联,这意味着大部分的数据交互都是标准的MongoDB文档(也就是MongoDB最基本的单位:文档)。
3.MongoDB shell 脚本编程
从上面我们可以了解到,MongoDB shell的命令、方法、数据结构都是基于交互式的JavaScript的,所以我们可以创建脚本来管理MongoDB。
其优处是,脚本可以运行多次,并且可以先写好脚本,然后在指定时间运行,而且我们可以在脚本中做一些逻辑处理,对数据的处理更加灵活。
在JavaScript脚本中,我们可以使用任意数量的JavaScript表达式(如条件语句和循环)与MongoDB命令。
shell中使用脚本编程主要有三种方式:
- 在命令行中使用参数–eval(expression),expression 是要执行的JavaScript 表达式。
如:mongo test --eval "printjson(db.getCollectionNames())"
- 在shell启动后使用load()直接加载预先写好的javaScript脚本,也就是js文件。
如:我们先在get_collection.js文件中添加以下代码,db = connection("localhost/words");printjson(db.getCollectionNames)
,然后我们启动shell,使用load("/data/db/get_collection.js")
命令来运行get_collection.js文件 - 在命令行指定要执行的JavaScript文件。
如:我们直接在命令行执行上面的文件mongo get_collection.js
一般我们用的最多的是第三种。当然第三种我们还可以执行多个js文件
mongo get_collecion.js load_data.js get_data.js
注:MongoDB shell 因为是基于交互式的JavaScript,所以在MongoDB shell中可以使用一切的JavaScript语法,这里就不讲了。如果不熟悉JavaScript的可以网上找教程看下。
MongoDB Compass
什么是MongoDB Compass?
MongoDB 3.2引入了MongoDB Compass-一个图形化工具,能够帮助您在不需要知道MongoDB查询语法的前提下,便利地分析和理解您的数据库模式,并且帮助您可视化地构建查询。
开发MongoDB Compass工具主要是为了实现以下三个主要目标:
- 模式发现
- 数据发现
- 查询的可视化构建
模式发现
Compass在一个集合的模式中展示字段的数据类型。下面的案例来自于我在测试启动Compass时使用的一个模拟数据库。它展示了集合中包含date类型last_login字段文档的报表:
Compass也展示了文档之间不同数据类型的字段中,不同数据类型所占的百分比分布。在这个示例中,81%的文档将phone_no存储为字符串,剩余的19%则存储为数字:
对于稀疏字段,一些文档并没有存储该值,Compass将缺失值的比例显示为“undefined”。在这里,40%的示例文档缺失了age字段。
这对于了解您的应用是否正在以您希望的方式存储数据非常有用。想想一个清新:您有一个混合有字符串和数字的字段,也许在应用的某个地方隐藏着bug,正在使用错误的数据类型存储数据。
数据发现
Compass能够以直方图的形式展示一个集合中的数据频率和分布。例如,下面是一个包含着用户年龄的数据集合。我们可以看到最小的年龄是16岁,最大的是56岁,而最普遍的年龄在将近40岁(精确值可以通过将鼠标放置在对应的块上显示)
下面是另一个存储着姓名字段的示例。Compass将会展示该字段随机的一些字符串值:
查询的可视化构建
您是否想以一种更简单的方式输出一个MongoDB查询?Compass中的图表是全方位交互式的。点击一个图表值或者块将会自动在接口中构建一个匹配选定范围的MongoDB查询。
在下面的案例中,点击“JFK”块将会构建一个匹配所有departureAirportFsCode字段为“JFK”的查询:
点击其它字段值将会向选项中增加字段和范围,构建一个更加复杂的查询。继续我们的示例,除了从JFK机场离开的条件之外,我们还选择了一个特定的flightId。
一旦您点击应用按钮,Compass将会执行查询并且返回结果!就是这么容易。您可以通过一系列的按钮点击就马上构建出相应的查询。
最后一个话题-我们并没有忘记JSON。您可以在文档浏览面板查看对应的文档,直接通过点击页面右边的文档视图按钮就可以完成。
MongoDB Compass下载
我们可以从官方下载路径下载安装包我们选择适合的版本号以系统之后点击下载,如图
会跳转到一个数据信息的页面,这里我们可以随便输入的,不会验证的。当然因为MongoDB Compass内部有直接连接MongoDB Compass的开发人员的窗口,如果你以后可能有相关问题,你可以直接通过其窗口直接联系到相关人员,为了方便,建议输入正确的联系方式[从不敢问过。。。汗]
输入联系信息之后,就可以直接下载了。
当然如果大家不想从官网下载,我讲其分享到百度云盘,大家可以点击下载,密码是8pu3。我下载的是windows版本的,如果大家想要Linux的,请自行下载。
其安装也非常简单,直接运行程序,不需要我们做任何操作,即可安装成功。
安装完成之后,会直接打开,如图:
我们直接点击CONNECT按钮即可,因为上面的默认连接属性足以连接到我们本地的MongoDB了,当然如果是连接别的MongoDB数据库,那么我们就需要输入对应的连接信息了。
连接成功之后,会出现以下的管理页面,我们就可以看到当前MongoDB有哪些数据库了。如下图:
具体的MongoDB Compass如何玩,大家可以自行探索。
如果我们想要使用本地的MongoDB Compass远程连接服务器上的MongoDB,可以参考这篇文章,这篇文章中的重启SSH,大家需要修改下。