跳到主要内容

SQL 窗口(MongoDB)

本文介绍如何使用 SQL 窗口管理 MongoDB 数据库。

背景信息

MongoDB 是一个开源的 NoSQL 数据库管理系统,以文档(Document)存储方式存储数据,具有可扩展、高性能、高可用、多编程语言支持等特性,目前已经是一种非常流行的 NoSQL 数据库,为企业存储和处理大量非结构化数据提供了便利。

NineData 的 SQL 窗口功能支持对 MongoDB 数据源进行管理,通过 SQL 窗口,支持您以可视化的方式轻松管理企业数据,大幅降低操作门槛。同时,SQL 窗口还提供了一系列企业级能力,包括团队协作、权限管控、审计日志、SSO 单点登录、SQL 开发规范、审批流程等功能,提升团队的协作效率和数据管理的规范性。

功能介绍

NineData 的 SQL 窗口(MongoDB)提供多个便捷功能,帮助您轻松管理您的数据源。

功能
说明
可视化管理支持以可视化的方式对 MongoDB 数据库进行增删改查操作。
编辑器提供命令行模式,支持 MongoDB 功能强大的命令和选项,可以满足各种不同的需求。
工作现场恢复对于浏览器意外退出或突发宕机等场景,您只需要重新登录 NineData 控制台并打开 SQL 窗口,之前打开的数据源以及执行过的命令会被自动加载。由于页面状态保存在云端,不受浏览器或主机的限制,您可以随时随地恢复工作现场。
执行历史会记录当前账号在 NineData 控制台执行过的所有命令,还支持根据数据源、执行时间、命令关键字等方式快速检索。您也可以快速复制执行历史中的命令重新执行。
SQL 规范检查组织模式组织模式支持对组织下的每个用户分配不同的角色和资源管理权限,适用于同一组织下多用户协同开发,在保证数据安全的同时,提升整体生产效率。下,系统会基于配置的 SQL 开发规范检查每一条在 SQL 窗口中执行的命令,如果该条命令不符合规范,则会被系统拦截,保证数据库安全。

使用场景

NineData 的 SQL 窗口(MongoDB)功能适用于以下场景:

  • 开发人员:在开发过程中,开发人员可以通过 SQL 窗口管理和编辑 MongoDB 数据库中的数据,以便更快速、高效地开发应用程序。

  • 数据库管理员:帮助数据库管理员更轻松地管理 MongoDB 数据库,例如新增、编辑和删除数据等。

  • 运维人员:帮助运维人员快速监控和分析 MongoDB 数据库的性能和运行情况,以便及时发现和解决问题。

前提条件

  • 已将目标需要管理的数据库添加到 NineData。如何添加,请参见管理数据源

  • 数据源必须为 MongoDB 3.2 版本及以上。

  • 在组织模式()下,您必须拥有目标数据源的只读、DML 或 DDL 权限。

    提示

    只读权限仅支持查询操作。

  • 在商业化版本下(),请确保您的包年包月订阅未过期,否则将无法正常使用数据库 DevOps 服务。您可以在 NineData 控制台页面右上方快速查看剩余配额以及到期时间。check_quota

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

    提示

    如果之前登录过数据源且没有关闭,则会自动进入该数据源页面。

  3. 单击 下方文本框,会弹出您已添加的数据源,单击目标数据源,并单击,跳转到 SQL 窗口。

    提示
    • 如果您之前没有创建过数据源,则会显示空白页。此时,请单击页面中的
    • 如果有多个数据源,您可以在框中输入全部或部分关键词进行精确查找或模糊查找。支持搜索的字段如下:

      • 数据源名称

      • IP 地址

  4. 打开 SQL 窗口后,即可对数据源执行 SQL 开发操作。 SQL 窗口的详细使用方法,请参见 界面说明

界面说明

  • 可视化编辑器

    mongo-interface

    序号
    功能
    介绍
    1SQL 窗口页签表示当前已打开的数据源 SQL 窗口,多个 SQL 窗口可以通过单击页签切换,单击页签右侧的X可以关闭该 SQL 窗口。右键菜单支持如下操作:
    • :打开当前数据源详情窗口。
    • :打开一个新的数据源 SQL 窗口。
    • :关闭当前页签。
    2打开数据源选择并打开新的数据源 SQL 窗口。
    3数据源信息展示当前 SQL 窗口的数据源信息,包含环境、IP 地址以及端口号,单击右侧的info图标可以查看当前数据源的详情。
    右键菜单:
    • :显示当前数据源的详情信息,包含用户名、连接地址、服务器版本号等。
    • :刷新数据源信息。
    4收藏|刷新
    • 收藏:单击收藏图标可以将当前数据源添加到中,添加后可以在新建 SQL 窗口中快速选择。
    • 刷新:可刷新当前数据源中的数据。
    5搜索输入集合名称名快速查找目标集合。支持输入完整的集合名进行精确搜索,也支持输入集合名中的部分字符加星号通配符(*)进行模糊搜索。
    6功能按钮
    • thread 显示当前数据库服务器上所有活动连接的信息,以及这些连接正在执行的查询。
    • table 切换可视化模式。
    • codefill 切换编辑器模式。
    • expend 将 SQL 窗口以全屏方式显示(浏览器大小)。全屏后,单击右上角的compress 可以恢复到原始 SQL 窗口大小。
    7数据库列表以树的形式展示当前数据源中所有的数据库,以及数据库中所有的集合、视图、索引等信息。将鼠标悬停在目标库、集合、索引、视图右侧的info图标上,可以展示详细信息。
    通用右键菜单
    • :打开一个新的 SQL 窗口页签。
    • :刷新数据库列表。
    数据库右键菜单
    • :查看目标库的详细信息,包括库中集合、视图、索引、文档的数量,以及各对象的大小等信息。
    • :创建数据库,创建时需要同时输入数据库名称和集合名称。
    • :删除目标数据库。
    • :在目标库中创建集合。
    集合右键菜单
    • :在目标库中创建集合。
    • :更改目标集合的名称。
    • :清空目标集合中所有的文档。
    • :删除目标集合。
    • :在目标集合中创建索引。更多信息,请参见创建索引
    索引右键菜单
    • :在目标集合中创建索引。更多信息,请参见创建索引
    • :删除目标索引。
    视图右键菜单
    • :更改目标视图的名称。
    • :删除目标视图。
    8选择数据库可视化选择目标数据库进行操作。
    9查看|编辑数据在左侧数据库列表中单击某个集合,即可在此处显示该集合中的所有文档。
    在此您可以进行如下操作:
    • 搜索文档:支持在页面上方的搜索框中对集合中的文档进行精确搜索和模糊搜索。
      • 精确搜索:{<字段名称>:<值>}
      • 模糊搜索:{<字段名称>:{$regex:<值>}}
      String 类型的值需要加上双引号("")。
    • :单击搜索框右侧的,提供更多条件进行自定义搜索。更多信息,请参见高级搜索
    • :MongoDB 查询优化器基于搜索框中的内容生成的查询执行计划,用于确定最佳的查询方式和执行策略。执行计划描述了 MongoDB 如何执行查询并访问数据库中的数据。
    • :在当前集合中插入单个或多个文档,插入时仅需在大括号({})中使用 <字段名>:<值> 格式即可,多个字段之间用逗号(,)分隔。插入 String 类型的值时,需要用双引号("")将值包裹,例如:{name:"zhangsan"}
    • 切换数据显示方式:通过单击显示方式的图标,可以实时切换数据显示方式。
      • table:以表格形式展现数据。
      • list02:以列表形式展现数据。
      • json02:以 JSON 形式展现数据。
    • 编辑文档:以可视化的形式编辑文档。更多信息,请参见编辑文档
    • 复制文档:单击目标文档右侧列的ellipsis>(JSON 下直接单击),可将该文档复制为 JSON 数组。
    • 克隆文档:单击目标文档右侧列的ellipsis>(JSON 下直接单击),可以克隆一个和目标文档一模一样的文档。
    • 删除文档:单击目标文档右侧列的ellipsis>(JSON 下直接单击),可以删除目标文档。
    • 刷新页面:单击页面右上角的,可以刷新页面。
    • :单击页面右上角的,可以删除当前集合。
  • 命令行编辑器

    mongo_command_line

    序号
    功能
    介绍
    1SQL 窗口页签表示当前已打开的数据源 SQL 窗口,多个 SQL 窗口可以通过单击页签切换,单击页签右侧的X可以关闭该 SQL 窗口。右键菜单支持如下操作:
    • :打开当前数据源详情窗口。
    • :打开一个新的数据源 SQL 窗口。
    • :关闭当前页签。
    2打开数据源选择并打开新的数据源 SQL 窗口。
    3数据源信息展示当前 SQL 窗口的数据源信息,包含环境、IP 地址以及端口号,单击右侧的info图标可以查看当前你数据源的详情。
    右键菜单:
    • :显示当前数据源的详情信息,包含用户名、连接地址、服务器版本号等。
    • :刷新数据源信息。
    4收藏|刷新
    • 收藏:单击收藏图标可以将当前数据源添加到中,添加后可以在新建 SQL 窗口中快速选择。
    • 刷新:可刷新当前数据源中的数据。
    5选择数据库可视化选择目标数据库进行操作。
    6功能按钮
    • execute 执行选中的 SQL 语句。
    • plan:查看选中 SQL 语句的执行计划。
    • collect:将当前 SQL 窗口中的所有命令保存至收藏夹,方便下次使用。
    • sqlfile:查看已保存的命令,您可以将目标命令至当前的 SQL 窗口中。同时可以目标命令。
    • time:查看目标数据源的命令执行历史。您可以选择日期过滤出某个时间段的执行历史,也可以通过关键词(命令本身、数据库名称、错误提示)搜索执行历史。
    • setting02
      • :可选
        • (默认):新的结果集将覆盖上一次的执行结果。
        • :生成新的页签展示新的结果集。
      • :更改 SQL 窗口的主题,可选
      • :拖动滑块调整 SQL 窗口中 SQL 语句的字体大小,默认值如下:
        • Windows:16
        • MacOS:13
    • thread:显示当前数据库服务器上所有活动连接的信息,以及这些连接正在执行的查询。
    • admin|可操作,开启该模式后,SQL 窗口中执行的所有命令不受规范或审批流的限制,均可直接执行。
    • table 切换可视化模式。
    • codefill 切换编辑器模式。
    • expend 将 SQL 窗口以全屏方式显示(浏览器大小)。全屏后,单击右上角的compress 可以恢复到原始 SQL 窗口大小。
    7搜索输入集合名称名快速查找目标集合。支持输入完整的集合名进行精确搜索,也支持输入集合名中的部分字符加星号通配符(*)进行模糊搜索。
    8数据库列表以树的形式展示当前数据源中所有的数据库,以及数据库中所有的集合、视图、索引等信息。将鼠标悬停在目标库、集合、索引、视图右侧的info图标上,可以展示详细信息。
    通用右键菜单
    • :打开一个新的 SQL 窗口页签。
    • :刷新数据库列表。
    数据库右键菜单
    • :查看目标库的详细信息,包括库中集合、视图、索引、文档的数量,以及各对象的大小等信息。
    • :创建数据库,创建时需要同时输入数据库名称和集合名称。
    • :删除目标数据库。
    • :在目标库中创建集合。
    集合右键菜单
    • :在目标库中创建集合。
    • :更改目标集合的名称。
    • :清空目标集合中所有的文档。
    • :删除目标集合。
    • :在目标集合中创建索引。更多信息,请参见创建索引
    索引右键菜单
    • :在目标集合中创建索引。更多信息,请参见创建索引
    • :删除目标索引。
    视图右键菜单
    • :更改目标视图的名称。
    • :删除目标视图。
    9命令行窗口执行 MongoDB 命令的窗口。命令行窗口支持如下功能:
    • 执行 MongoDB 命令:支持执行单个或多个命令。
    • 语法高亮:以不同颜色显示不同语法元素,提高代码的可读性。
    • 中断执行:命令执行过程中可以单击停止查询中断命令的执行。
    • 命令智能提示:输入命令过程中根据您输入的语义自动弹出提示。
    • 右键菜单:
      • :执行光标所在位置的 SQL 语句。
      • :查看选中 SQL 语句的执行计划。
      • :将当前 SQL 窗口中的所有命令保存至收藏夹,方便下次使用。
      • :查看已保存的命令,您可以将目标命令至当前的 SQL 窗口中。同时可以目标命令。
      • :查看目标数据源的 SQL 的执行历史。您可以选择日期过滤出某个时间段的执行历史,也可以通过关键词(SQL 语句、数据库名称、错误提示)搜索执行历史。
      • :显示当前数据库服务器上所有活动连接的信息,以及这些连接正在执行的查询。
      • 常规操作:包括
      • :选中光标所在位置的 SQL 语句。
    10执行信息、结果集显示命令的执行信息以及结果集。
    • 执行信息:包含执行时间、执行的命令、执行状态、执行详情等信息。
    • 结果集:显示命令的返回结果。您还可以做如下操作:
      • 对结果集进行搜索,支持
      • 单击下列图标切换结果集展现方式:
        • json02(默认):以 JSON 形式展现数据。
        • table:以表格形式展现数据。
        • list02:以列表形式展现数据。
      • 在 JSON 结果集中,单击可以复制所有结果集。
      • 将鼠标悬浮在目标结果集的页签上,将显示该结果集对应的命令。

SQL 窗口(MongoDB)支持对目标集合执行更高阶的搜索,提供如下各项参数:

  • Project:对搜索结果进行投影(Projection),它可以根据需要,只输出所需的字段或计算的结果。通过 Project,可以对文档进行重命名、添加新字段、删除字段等操作,从而定制输出结果的结构。例如:{name:1} 表示搜索结果中仅展示 name 字段。更多信息,请参见Aggregation Pipeline Optimization

  • Sort: 对搜索结果进行排序。它可以按照指定的字段进行升序或降序排序。可以同时指定多个排序字段,并可以使用索引提高排序的性能。 例如:{age:1} 表示年龄从小到大排序搜索结果,{age:-1} 则表示年龄从大到小。更多信息,请参见Aggregation Pipeline Optimization

  • Collation:指定搜索结果的排序规则,用于区分大小写、多语言排序、特定排序规则等需求,可以更精细地控制字符串的排序结果。例如:{locale:"en"} 表示搜索结果将根据英语的排序规则进行。更多信息,请参见 Collation

  • Skip:用于跳过指定数量的文档,并返回剩余文档,实现分页或跳过不需要的文档。例如:输入整数 10,将跳过前 10 条搜索结果,直接从第 11 条搜索结果开始展示。

  • Limit:用于限制返回的文档数量。例如:输入整数 10,将仅返回 10 条搜索结果。

编辑文档说明

通过 SQL 窗口(MongoDB),您可以在多种模式下对文档进行可视化编辑:

  • table表格模式:单击目标文档右侧列的,可直接编辑对应字段的值,也可单击目标字段右侧的tableedit图标,编辑 Value 文本框里的值,并单击。完成编辑后,单击页面下方的完成变更。
  • list02列表模式:单击目标文档右侧列的,再单击改文档 Value 列右侧的tableedit图标,在 Value 文本框进行编辑,支持变更字段名和值,也支持新增字段,然后单击。完成编辑后,单击页面下方的完成变更。
  • json02JSON 模式:直接在 JSON 字符串中进行编辑,支持变更字段名和值,也支持新增字段,完成编辑后,单击页面下方的完成变更。

创建索引

  1. 在 SQL 窗口左侧的数据库列表中找到目标集合,右键单击该集合并单击

  2. 根据下表进行配置:

    参数
    说明
    输入索引的名称,索引的命名请尽量遵循命名规范。
    Field选择需要添加索引的字段名,单击 Add 可以新增一行,为多个字段添加索引。
    Type选择索引类型,支持如下类型:
    • 升序索引(Ascending Index):对索引字段进行升序排序。
    • 降序索引(Descending Index):对索引字段进行降序排序。
    • 散列索引(Hashed Index):将索引字段的值哈希化,并以哈希值进行索引。该索引可用于均匀分布数据的快速查找,但不支持范围查询。
    • 文本索引(Text Index):用于在文本数据上进行全文搜索,支持对文本字段进行关键字搜索和排序。
    • 2dsphere 索引:用于存储地理空间数据(经纬度坐标),支持地理空间的查询和索引,如距离计算和范围查询。
    • 2d 索引:用于存储平面上的地理空间数据(x、y 坐标),支持平面地理空间的查询和索引。
    • GeoHaystack 索引:用于优化附近的地理位置查询,适用于具有大量地理位置数据的场景。
    其他配置选择索引的配置选项:
    • Background(默认选中):指定是否在后台创建索引,对于大型集合,如果不选中该选项可能导致实例被阻塞。
    • Unique:指定索引是否要求唯一值,选中该选项可以确保索引字段的值在集合中是唯一的。
    • Sparse:指定是否创建稀疏索引。选中该选项,将只针对包含目标字段的文档创建索引,没有该字段的文档将被忽略。使用稀疏索引可以节省索引的存储空间。
    • Expire after:用于创建一个具有过期时间的索引,也称为 Time to Live(TTL)索引,该选项支持您为集合中的文档指定一个自动删除的时间点,单位为秒。
    预览将可视化创建索引的动作转换成实际的 MongoDB 命令,让整个索引的创建过程更加直观。
  3. 单击

附录:MongoDB 命令行编辑器支持的命令列表

Method语法
aggregate()db.<collection name>.aggregate()
bulkWrite()db.<collection name>.bulkWrite()
compactStructuredEncryptionData()db.<collection name>.compactStructuredEncryptionData()
countDocuments()db.<collection name>.countDocuments()
createIndex()db.<collection name>.createIndex()
createIndexes()db.<collection name>.createIndexes()
dataSize()db.<collection name>.dataSize()
deleteOne()db.<collection name>.deleteOne()
deleteMany()db.<collection name>.deleteMany()
distinct()db.<collection name>.distinct()
drop()db.<collection name>.drop()
dropIndex()db.<collection name>.dropIndex()
dropIndexes()db.<collection name>.dropIndexes()
estimatedDocumentCount()db.<collection name>.estimatedDocumentCount()
explain()db.<collection name>.explain()
find()db.<collection name>.find()
findAndModify()db.<collection name>.findAndModify()
findOne()db.<collection name>.findOne()
findOneAndDelete()db.<collection name>.findOneAndDelete()
findOneAndReplace()db.<collection name>.findOneAndReplace()
findOneAndUpdate()db.<collection name>.findOneAndUpdate()
getIndexes()db.<collection name>.getIndexes()
getShardDistribution()db.<collection name>.getShardDistribution()
getShardVersion()db.<collection name>.getShardVersion()
hideIndex()db.<collection name>.hideIndex()
insertOne()db.<collection name>.insertOne()
insertMany()db.<collection name>.insertMany()
isCapped()db.<collection name>.isCapped()
latencyStats()db.<collection name>.latencyStats()
mapReduce()db.<collection name>.mapReduce()
reIndex()db.<collection name>.reIndex()
remove()db.<collection name>.remove()
renameCollection()db.<collection name>.renameCollection()
replaceOne()db.<collection name>.replaceOne()
stats()db.<collection name>.stats()
storageSize()db.<collection name>.storageSize()
totalIndexSize()db.<collection name>.totalIndexSize()
totalSize()db.<collection name>.totalSize()
unhideIndex()db.<collection name>.unhideIndex()
updateOne()db.<collection name>.updateOne()
updateMany()db.<collection name>.updateMany()
validate()db.<collection name>.validate()