MongoDB 学习笔记(五)——MongoDBshell 与MongoDBCompass
该篇博⽂主要讲解下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 的连接命令,其命令格式为:
上⾯的命令中使⽤ [ ] 括起来的部分都是可以省略的,
其中ip 是要连接的数据库所在的ip地址,若不填 则默认localhost 即127.0.0.1。
其中port 是要连接的数据库的端⼝号,若不填,则默认27017.
其中/database,是要连接的MongoDB数据库的哪⼀个数据库,如果不填,则默认连接test数据库
其中[–username “username” –password “password”] ,则是如果数据库在启动的时候使⽤–auth 开启了⾝份验证,则需要输⼊⽤户名和密码,这个后⾯会讲到。
当然连接命令还有其他的属性,这⾥就不说了,⽐如直接运⾏js⽂件等。
我们可以连接⼀下,如下图所⽰:
2. MongoDB shell 命令 shell 提供了⼏个以后会经常使⽤的命令:
windows
mongo [ip ][:port ][/database ] [--username "username" --password "password"]
Linux
./mongo [ip ][:port ][/database ] [--username "username" --password "password"]
注:不要把这个命令和启动MongoDB 的命令混淆了,⼀个是mongod ⼀个是mongo
命令描述
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(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 "CollectionNames())"
在shell启动后使⽤load()直接加载预先写好的javaScript脚本,也就是js⽂件。
如:我们先在get_collection.js⽂件中添加以下代码,db = connection("localhost/words");CollectionNames),然后我们启动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字段⽂档的报表:
shell最简单脚本Compass也展⽰了⽂档之间不同数据类型的字段中,不同数据类型所占的百分⽐分布。在这个⽰例中,81%的⽂档将phone_no存储为字符串,剩余的19%则存储为数字:
对于稀疏字段,⼀些⽂档并没有存储该值,Compass将缺失值的⽐例显⽰为“undefined”。在这⾥,40%的⽰例⽂档缺失了age字段。
这对于了解您的应⽤是否正在以您希望的⽅式存储数据⾮常有⽤。想想⼀个清新:您有⼀个混合有字符串和数字的字段,也许在应⽤的某个地⽅隐藏着bug,正在使⽤错误的数据类型存储数据。
数据发现
Compass能够以直⽅图的形式展⽰⼀个集合中的数据频率和分布。例如,下⾯是⼀个包含着⽤户年龄的数据集合。我们可以看到最⼩的年龄是16岁,最⼤的是56岁,⽽最普遍的年龄在将近40岁(精确值可以通过将⿏标放置在对应的块上显⽰)
下⾯是另⼀个存储着姓名字段的⽰例。Compass将会展⽰该字段随机的⼀些字符串值:
查询的可视化构建
您是否想以⼀种更简单的⽅式输出⼀个MongoDB查询?Compass中的图表是全⽅位交互式的。点击⼀个图表值或者块将会⾃动在接⼝中构建⼀个匹配选定范围的MongoDB查询。
在下⾯的案例中,点击“JFK”块将会构建⼀个匹配所有departureAirportFsCode字段为“JFK”的查询:
点击其它字段值将会向选项中增加字段和范围,构建⼀个更加复杂的查询。继续我们的⽰例,除了从JFK机场离开的条件之外,我们还选择了⼀个特定的flightId。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。