说到MongoDB客户端,不要太多,有免费的也有付费的。每个人都有他习惯使用的客户端IDE。除JetBrains公司出品的超强DataGrip外,Robot 3T值得一提。
Robot 3T,用C++编写,有限开源免费,部分高级功能需要付费购买license,现已更名为Studio 3T。
省略搜索下载安装等步骤。
输入基本的IP或URL、Port信息后,切换到Authentication标签页:
对于MongoDB 4.0及以上版本,鉴权机制选择SCRAM-SHA-256
,低于4.0版本,则选择SCRAM-SHA-1
。不难得知,前者使用更高级的SHA算法,安全性更高。
输入用户名及密码,点击连接测试。如果连接要等3秒左右以上,则一般是连接失败。
切换到Proxy标签页,Studio 3T默认使用第二个,即Application default proxy。选择第一个不使用代理,再次尝试,则连接成功。鄙人遇到的就是这个Proxy导致连接失败的问题。
界面非常清爽,主要就是熟悉的Connect、Import、Export,及IntelliShell(智能版Shell命令行执行窗口)。
鼠标放在某个连接上,会给出Connection概要信息:
鼠标放在某个Database上,会给出概要信息:
鼠标放在某个Collection上,会给出概要信息:
选中某个Connection,右键:
选中某个Database后,右键:
选中某个集合后,右键:
双击某个集合,默认查询50条数据。界面操作几乎可以一目了然。
不足的是,排序功能并不是全局排序,只是对当前页面50条(可修改)数据进行排序:
三种视图:
Table View:以传统关系型数据库样式显示多条文档的多个字段
JSON View:以JSON格式显示
Tree View:树形,个人感觉比较适合数组类字段
右下角展示数据查询耗时,没有包括渲染,点击Count Documents,则显示集合文档总数,即count()
函数。
默认查询50条数据,可改成10。
值得一提的是,Studio 3T支持修改UTC时区。参考MongoDB日期存储与查询、@Query、嵌套字段查询实战总结,我们处于北京时间,即东八区,即UTC+8小时区。应用层的日期类型不管是定义成Date、Instant还是LocalDateTime,存储到MongoDB时,都会存储为ISODate时间,UTC+0时间。
查询MongoDB日期时,会发现数据库内存在大量半夜及凌晨时间段的数据(作为一款极低频App,这个时间是不正常的)
可通过设置UTC时区来调整日期类数据展示效果:
设置后再次执行查询结果如下:
如果同时调整展示格式为Default Locale,效果如下:
即Export,从上面三张截图,不难得知,Studio 3T提供3个级别的导入导出操作,从小到大:单个集合,多个集合(即单Database维度),多Database(即Connection维度)。
以单个集合为例,右键Export Collection,默认使用BSON-mongodump选项,进入到如下界面保持默认配置,点击Run即可。
值得注意的是,导出格式有两种:
.bson.gz
或.json.gz
.agz
文件,是否勾选压缩,文件后缀名不变。
不管是哪一种导出格式,分析文件(夹)大小,启用压缩选项后,可发现压缩率高达14%(原始文件142KB,压缩后仅20KB)。
注:仅测试并计算一个集合,不同集合其压缩率不可能完全一样。
元数据JSON文件:
{
"indexes": [
{
"v": {
"$numberInt": "2"
},
"key": {
"_id": {
"$numberInt": "1"
}
},
"name": "_id_",
"ns": "corpus.mds_factors"
},
],
"uuid": "91390b63ff264b5ab30379870cd02f13",
"collectionName": "mds_factors",
"type": "collection"
}
indexes记录着集合的索引情况,ns即namespace,是Database.集合名
。type=collection
,表明是一个集合,方便后续Import导入时先解析此元数据文件。
即Import,提供JSON、CSV、SQL Database、BSON等各种不同数据源,且大多数都需要付费方可使用。上面导出时有两种格式,此时导入可以按需选择一种格式:
此处使用folder
格式,选择文件夹:
注意得选择正确的路径,否则识别不到(下面截图,目录多了个/corpus
,则无法发现Database和Connection)。点击右侧的Change target,进入连接管理器(Connection Manager)标签页,可更换连接目标,目标只支持connection级别切换:
选择好目标数据源,即Connection后,有很多连接选项:
选项:
--drop
:导入集合前先删除--keepIndexVersion
:不更新索引版本--noIndexRestore
:不恢复索引--noOptionsRestore
:不恢复集合选项--maintainInsertionOrder
:--stopOnError
:出现错误停止恢复(导入)--bypassDocumentValidation
:导入时不执行文档检验--writeConcern
--restoreDbUsersAndRoles
:恢复选择的DB的用户和角色定义--oplogReplay
--oplogLimit
IntelliShell
TODO:
没有自动补充功能?