MongoDB Compass 使用说明

MongoDB Compass 使用说明

  • 安装
  • 工具栏按钮详细介绍
    • Connect(连接)
      • [1. New Window(新窗口)](#1. New Window(新窗口))
      • [2. Disconnect(断开连接)](#2. Disconnect(断开连接))
      • [3. Import Saved Connections(导入保存的连接)](#3. Import Saved Connections(导入保存的连接))
      • [4. Export Saved Connections(导出保存的连接)](#4. Export Saved Connections(导出保存的连接))
      • [5. Exit(退出)](#5. Exit(退出))
    • Edit(编辑)
      • [1. Undo(撤销)](#1. Undo(撤销))
      • [2. Redo(重做)](#2. Redo(重做))
      • [3. Cut(剪切)](#3. Cut(剪切))
      • [4. Copy(复制)](#4. Copy(复制))
      • [5. Paste(粘贴)](#5. Paste(粘贴))
      • [6. Select All(全选)](#6. Select All(全选))
      • [7. Find(查找)](#7. Find(查找))
      • [8. Settings(设置)](#8. Settings(设置))
    • View(视图)
      • [1. Reload(重新加载)](#1. Reload(重新加载))
      • [2. Reload Data(重新加载数据)](#2. Reload Data(重新加载数据))
      • [3. Toggle Sidebar(切换侧边栏)](#3. Toggle Sidebar(切换侧边栏))
      • [4. Actual Size(实际大小)](#4. Actual Size(实际大小))
      • [5. Zoom In(放大)](#5. Zoom In(放大))
      • [6. Zoom Out(缩小)](#6. Zoom Out(缩小))
    • Collection(集合相关)
      • [1. Share Schema as JSON](#1. Share Schema as JSON)
      • [2. Import Data](#2. Import Data)
      • [3. Export Collection](#3. Export Collection)
    • Help
  • [My Queries](#My Queries)
  • Databases
    • 基本面板介绍
    • Documents:
      • Filter(文档查询过滤):
        • [1. 精确匹配](#1. 精确匹配)
        • [2. 范围查询](#2. 范围查询)
        • [3. 存在性查询](#3. 存在性查询)
        • [4. 数组查询](#4. 数组查询)
        • [5. 使用逻辑运算符](#5. 使用逻辑运算符)
        • [6. 正则表达式查询](#6. 正则表达式查询)
        • 高级用法
      • Options(精细化查询):
        • [1. Project(投影)](#1. Project(投影))
        • [2. Sort(排序)](#2. Sort(排序))
        • [3. Collation(排序规则)](#3. Collation(排序规则))
        • [4. Skip(跳过)](#4. Skip(跳过))
        • [5. MaxTimeMS(最大执行时间)](#5. MaxTimeMS(最大执行时间))
        • [6. Limit(限制返回数量)](#6. Limit(限制返回数量))
        • 综合示例
      • </>:
        • [1. My Query](#1. My Query)
        • [2. Exported Query](#2. Exported Query)
        • [3. 左下角勾选框](#3. 左下角勾选框)
          • [Include Import Statements](#Include Import Statements)
          • [Include Driver Syntax](#Include Driver Syntax)
      • Explain:
        • [Visual Tree 标签页](#Visual Tree 标签页)
        • [Raw Output 标签页](#Raw Output 标签页)
        • [Query Performance Summary](#Query Performance Summary)
    • Aggregations:
      • [1. Pipeline](#1. Pipeline)
      • [2. More Options](#2. More Options)
      • [3. SAVE](#3. SAVE)
      • [4. CREATE NEW](#4. CREATE NEW)
    • Schema:
    • Indexes:
  • Performance(实时性能监控)

MongoDB Compass 是官方推出的一款可视化界面工具,用于连接、管理和操作 MongoDB 数据库

安装

可以参考之前的一篇笔记
centos7部署MongoDB流程

工具栏按钮详细介绍

Connect(连接)

1. New Window(新窗口)

  • 功能:顾名思义,用于新增一个MongoDB的连接

2. Disconnect(断开连接)

  • 功能:顾名思义,用于断开当前MongoDB的连接

3. Import Saved Connections(导入保存的连接)

  • 功能:可从文件中导入之前保存的 MongoDB 连接配置,如果在其他设备上保存了连接信息,或者有团队成员共享了连接配置文件,就可以使用此选项快速导入这些连接,而无需重新手动配置
  • 使用场景
    • 团队协作:团队成员之间共享数据库连接信息,通过导入保存的连接可以快速建立相同的数据库连接
    • 设备迁移:当更换电脑或者使用新的设备时,将之前保存的连接文件导入,快速恢复数据库连接

4. Export Saved Connections(导出保存的连接)

  • 功能:与导入功能相对应,它用于将当前在 MongoDB Compass 中保存的连接配置导出到一个文件中,这个文件可以用于备份连接信息,或者与团队其他成员共享
  • 使用场景
    • 备份:定期导出连接配置文件,防止因软件故障或其他原因导致连接信息丢失
    • 共享:将自己配置好的连接信息分享给团队其他成员,提高工作效率

5. Exit(退出)

  • 功能:顾名思义,用于退出当前MongoDB Compass的连接

Edit(编辑)

1. Undo(撤销)

  • 功能:用于撤销上一步的操作,在对数据库文档进行编辑、对查询条件进行修改等操作时,如果不小心执行了错误的操作,可使用 Undo 功能恢复到上一个正确的状态 (个人觉得相对鸡肋,可以使用ctrl + Z代替)

2. Redo(重做)

  • 功能:与 Undo 功能相反,它用于恢复被撤销的操作,若撤销了某个操作后,又想恢复这个操作,就可以使用 Redo 功能 (个人觉得相对鸡肋,可以使用ctrl + Y代替)

3. Cut(剪切)

  • 功能:用于将选中的内容从当前位置移除,并复制到系统剪贴板中,在 MongoDB Compass 里,可能用于复制文档中的某个字段值或者选中的文本内容等 (个人觉得相对鸡肋,可以使用ctrl + C代替)

4. Copy(复制)

  • 功能:将选中的内容复制到系统剪贴板,而原内容保留在原位,在 MongoDB Compass 中,可以复制文档中的字段名、字段值、查询语句等内容 (个人觉得相对鸡肋,可以使用ctrl + C代替)

5. Paste(粘贴)

  • 功能:将系统剪贴板中的内容粘贴到当前的编辑位置,当使用了 Cut 或 Copy 操作后,就可以使用 Paste 把剪贴板中的内容放到指定位置 (个人觉得相对鸡肋,可以使用ctrl + V代替)

6. Select All(全选)

  • 功能:快速选中当前界面中所有可选择的内容,在数据查看或编辑界面,如果需要对所有文档或者某个文档中的所有字段进行操作,如复制、删除等,使用 Select All 可以一次性选中全部内容 (个人觉得相对鸡肋,可以使用ctrl + S代替)

7. Find(查找)

  • 功能:打开查找功能窗口,在当前显示的数据中查找特定的文本或内容,输入查找关键词后,系统会在文档的字段名、字段值等位置进行匹配,并高亮显示找到的内容 (个人觉得相对鸡肋,可以使用ctrl + F代替)

8. Settings(设置)

  • 功能:注意关于主题、隐私项、实验性功能等(通常默认即可)

View(视图)

1. Reload(重新加载)

  • 功能:此选项会重新加载整个应用程序界面以及与之关联的所有数据和配置,它会刷新界面的各个元素,比如,当对数据库进行了一些全局性的设置更改后,使用 Reload 可以让这些更改生效并在界面上体现出来
  • 使用场景:在完成数据库配置更改、插件更新或者界面显示出现异常时,通过 Reload 来让应用程序重新加载以获取最新状态

2. Reload Data(重新加载数据)

  • 功能:主要用于刷新当前视图中显示的数据,当数据库中的数据发生了变化(例如有新的文档插入、现有文档被修改或删除),而界面上的数据还未更新时,使用 Reload Data 可以获取最新的数据并在界面上展示,它不会影响界面的其他设置和布局,仅针对数据进行更新(可以使用Ctrl + R)
  • 使用场景:在对数据库进行增删改操作后,希望立即看到数据更新结果时使用

3. Toggle Sidebar(切换侧边栏)

  • 功能:用于显示或隐藏界面的侧边栏

4. Actual Size(实际大小)

  • 功能:将界面内容恢复到默认的实际大小显示,在进行了缩放操作后,如果想让界面恢复到初始的、标准的显示尺寸,就可以选择 Actual Size,它会使文本、表格、图表等元素按照默认的大小和比例显示

5. Zoom In(放大)

  • 功能:用于放大界面内容的显示比例,通过点击 Zoom In,界面上的文本、图标、表格等元素会变大,方便查看细节内容,例如,当查看包含大量字段的文档,或者需要仔细查看图表中的数据点时,使用 Zoom In 可以让内容更加清晰可辨

6. Zoom Out(缩小)

  • 功能:与 Zoom In 相反,Zoom Out 用于缩小界面内容的显示比例,当希望在一个屏幕上看到更多的内容,或者界面元素显示过大影响整体查看时,点击 Zoom Out 可以缩小界面元素,以获得更宏观的视图,比如,在查看包含大量文档的集合列表时,缩小显示比例可以让更多的文档显示在屏幕上

Collection(集合相关)

1. Share Schema as JSON

  • 功能:该选项用于将当前集合的架构(Schema)以 JSON 格式导出,集合的架构定义了集合中文档的结构,包括字段名、字段类型、嵌套结构等信息,以 JSON 格式分享集合架构,方便团队成员、合作伙伴或开发者之间交流和理解集合的数据结构,也有助于在不同环境中进行数据建模和开发
  • 使用场景
    • 团队协作:在团队开发中,不同成员负责不同模块的开发,通过分享集合架构的 JSON 文件,大家可以清楚了解数据的组织方式,确保各个模块的数据交互顺利进行
    • 技术交流:与外部开发者或合作伙伴交流时,通过分享集合架构 JSON 文件,可以快速让对方了解数据库中集合的结构,提高沟通效率

2. Import Data

  • 功能:此功可让将外部数据导入到当前集合中,支持导入多种常见格式的数据,如 JSON、CSV 等,导入的数据可以是从其他数据库导出的数据,也可以是通过数据采集工具收集的数据,导入过程中,系统会根据集合的架构对导入的数据进行验证和处理,确保数据的完整性和一致性(效果等价于ADD DATA)

3. Export Collection

  • 功能:用于将当前集合中的数据导出到外部文件,支持导出的文件格式通常包括 JSON、CSV 等,导出的数据可以用于备份、数据分析、与其他系统集成等目的,在导出过程中,用户可以选择导出整个集合的数据,也可以根据特定的查询条件筛选部分数据进行导出(效果等价于EXPORT DATA)

Help

关于检查版本,BUG反馈,在线求助等等,没什么好说的...

My Queries

官方说明:

从 MongoDB Compass 1.31 开始,一旦连接集群,您就可以从 My Queries 视图加载已保存的查询和聚合

功能概述

My Queries 通常是数据库管理工具(如 MongoDB Compass)中的一个功能模块,可保存、管理和复用自定义的查询语句,通过将常用的查询保存到 My Queries 中,用户可以避免每次使用相同查询时都重新输入,提高查询效率,同时也方便对查询进行组织和管理

Databases

基本面板介绍

Create database : 新增一个数据库
refresh :刷新
view :切换视图展示方式
Sort by : 设置数据库/集合以什么方式排序
↑/↓ :设置正序或倒序

点进去可以查看数据库的详情:
storage size (存储大小), collections (集合数量), indexes (索引数量)

点进去可以查看到集合的详情:

storage size(存储大小), documents(文档数量), avg.document size(平均文档大小), indexes(索引数量), total index size(该集合里的所有索引所占用的空间大小)

再点进去到具体集合后,可以看到如下界面:

Documents:

顾名思义,文档详情,默认每页可查看20条,可以按照网格,json等视图方式展示

Filter(文档查询过滤):

常用功能,可用于各种条件查询文档

1. 精确匹配
  • 匹配单个字段:假设有一个名为 users 的集合,其中每个文档包含 name、age 和 email 字段,要筛选出 name 为 "ZhangSan" 的文档,可以使用以下筛选条件:
bash 复制代码
{ "name": "ZhangSan" }
  • 匹配多个字段:筛选出 name 为 "ZhangSan" 且 age 为 30 的文档:
bash 复制代码
{ "name": "ZhangSan", "age": 30 }
2. 范围查询
  • 大于( g t )和小于( gt)和小于( gt)和小于(lt):筛选出 age 大于 25 且小于 35 的文档:
bash 复制代码
{ "age": { "$gt": 25, "$lt": 35 } }
  • 大于等于( g t e )和小于等于( gte)和小于等于( gte)和小于等于(lte):筛选出 age 大于等于 25 且小于等于 35 的文档:
bash 复制代码
{ "age": { "$gte": 25, "$lte": 35 } }
3. 存在性查询
  • 检查字段是否存在:筛选出包含 phone 字段的文档:
bash 复制代码
{ "phone": { "$exists": true } }
  • 检查字段是否不存在:筛选出不包含 phone 字段的文档:
bash 复制代码
{ "phone": { "$exists": false } }
4. 数组查询
  • 匹配数组中的元素:假设文档中有一个 hobbies 数组字段,要筛选出 hobbies 数组中包含 "reading" 的文档:
bash 复制代码
{ "hobbies": "reading" }
  • 匹配数组长度:筛选出 hobbies 数组长度为 3 的文档:
bash 复制代码
{ "hobbies": { "$size": 3 } }
5. 使用逻辑运算符
  • 逻辑或($or):筛选出 name 为 "ZhangSan" 或者 age 为 30 的文档:
bash 复制代码
{ "$or": [ { "name": "ZhangSan" }, { "age": 30 } ] }
  • 逻辑非($not):筛选出 age 不等于 30 的文档:
bash 复制代码
{ "age": { "$not": { "$eq": 30 } } }
6. 正则表达式查询
  • 匹配字符串模式:筛选出 email 以 "@example.com" 结尾的文档:
bash 复制代码
{ "email": { "$regex": "@example.com$" } }
高级用法
  • 嵌套文档查询 :如果文档包含嵌套文档,可以使用点号(.)来访问嵌套字段,例如,假设文档中有一个 address 嵌套文档,包含 city 字段,要筛选出 address.city 为 "GuangZhou" 的文档:
    { "address.city": "GuangZhou" }
  • 组合多个条件:可以将上述各种条件组合使用,以实现更复杂的筛选,例如,筛选出 name 以 "J" 开头且 age 大于 25 的文档:
bash 复制代码
{ "name": { "$regex": "^J" }, "age": { "$gt": 25 } }

Options(精细化查询):

通常结合Filter一起使用

Options 部分提供了一系列用于细化查询结果的属性,包括Project、Sort、Collation、Skip、MaxTimeMS、Limit 这些属性,假设有一个名为 users 的集合,集合中文档结构如下:

bash 复制代码
{
    "_id": ObjectId("60d7a2d6a7c9b4001f7d8b2c"),
    "name": "ZhangSan",
    "age": 30,
    "city": "GuangZhou",
    "hobbies": ["reading", "swimming"]
}
1. Project(投影)
  • 作用:用于指定查询结果中要返回的字段,类似于 SQL 中的 SELECT 语句,可以控制只返回需要的字段,减少数据传输量
  • 示例:只返回 name 和 age 字段,排除 _id 字段
bash 复制代码
{
    "name": 1,
    "age": 1,
    "_id": 0
}

在 MongoDB Compass 的 Filter 输入查询条件,如 {}(表示查询所有文档),在 Project 输入上述投影条件,查询结果将只包含 name 和 age 字段

2. Sort(排序)
  • 作用:用于对查询结果进行排序,可以按照一个或多个字段进行升序(1)或降序(-1)排序,
  • 示例:按照 age 字段进行降序排序
bash 复制代码
{
    "age": -1
}

在 Filter 输入查询条件,在 Sort 输入上述排序条件,查询结果将按照 age 从大到小排列

3. Collation(排序规则)
  • 作用:用于指定字符串比较时的规则,如大小写敏感、重音敏感等,在处理多语言文本时非常有用
  • 示例:进行不区分大小写的排序
bash 复制代码
{
    "locale": "en",
    "strength": 2
}

这里 locale 指定语言环境为英语,strength 为 2 表示不区分大小写,在 Filter 输入查询条件,在 Sort 按某个字符串字段排序,同时在 Collation 输入上述规则,查询结果将按照不区分大小写的方式进行排序

4. Skip(跳过)
  • 作用:用于跳过指定数量的文档,通常与 Limit 结合使用实现分页功能
  • 示例:跳过前 5 个文档
bash 复制代码
5

在 Filter 输入查询条件,在 Skip 输入 5,查询结果将从第 6 个文档开始返回

5. MaxTimeMS(最大执行时间)
  • 作用:用于限制查询的最大执行时间,单位为毫秒,如果查询在指定时间内未完成,将终止查询并返回错误
  • 示例:设置查询的最大执行时间为 1000 毫秒(即 1 秒)
bash 复制代码
1000

在 Filter 输入查询条件,在 MaxTimeMS 输入 1000,如果查询执行时间超过 1 秒,将终止查询

6. Limit(限制返回数量)
  • 作用:用于限制查询结果返回的文档数量,通常与 Skip 结合使用实现分页功能
  • 示例:只返回前 10 个文档
bash 复制代码
10

在 Filter 输入查询条件,在 Limit 输入 10,查询结果最多返回 10 个文档

综合示例

假设要实现分页功能,每页显示 10 条记录,查询第 2 页的数据,按照 age 降序排序,只返回 name 和 age 字段:

  • Filter:{}(查询所有文档)
  • Project:{ "name": 1, "age": 1, "_id": 0 }
  • Sort:{ "age": -1 }
  • Skip:10(跳过第一页的 10 条记录)
  • Limit:10(每页显示 10 条记录)
  • MaxTimeMS:2000(设置最大执行时间为 2 秒)
  • Collation:可不设置,使用默认规则

通过这样的设置,可以得到第 2 页按照 age 降序排序,只包含 name 和 age 字段的查询结果,并且查询执行时间不会超过 2 秒

</>:

可导出基于不同语言的查询语句

1. My Query
  • 作用:这部分显示的是在 MongoDB Compass 可视化界面中设置好的查询内容,它以 MongoDB 的原生查询语法呈现,反映了在 Filter、Options(如 Project、Sort 等)中所做的设置,例如,如果在可视化界面设置了筛选条件 { "name": "ZhangSan", "age": { "$gt": 25 } },"My Query" 区域就会显示这个完整的查询语句
2. Exported Query
  • 作用:该区域将 "My Query" 中的 MongoDB 原生查询转换为其他编程语言的代码,方便在不同的编程环境中使用这个查询,可以通过切换下拉菜单选择不同的编程语言,常见的有 Python、Java、C++、Node.js 等
  • 示例 - Python:假设 "My Query" 是 db.users.find({ "name": "ZhangSan", "age": { "$gt": 25 } }),切换到 Python 后,"Exported Query" 可能会显示如下代码:
python 复制代码
from pymongo import MongoClient

client = MongoClient()
db = client['your_database_name']
collection = db['users']
results = collection.find({"name": "ZhangSan", "age": {"$gt": 25}})
for result in results:
    print(result)
3. 左下角勾选框
Include Import Statements
  • 作用:当勾选此框时,"Exported Query" 中会包含使用相应编程语言操作 MongoDB 所需的导入语句,例如在 Python 中,会包含 from pymongo import MongoClient;在 Java 中,会包含 import com.mongodb.client.MongoClients; 等相关导入语句,这有助于直接复制代码到项目中使用,无需额外去查找和添加导入语句
Include Driver Syntax
  • 作用:勾选此框后,"Exported Query" 会包含完整的数据库连接和操作的驱动语法,以 Python 为例,会包含创建 MongoClient 实例、连接到数据库和集合的代码,使代码成为一个完整可运行的脚本,如果不勾选,可能只显示核心的查询部分,如 collection.find({"name": "ZhangSan", "age": {"$gt": 25}}),适用于已经有数据库连接代码,只需要查询逻辑的情况

Explain:

Explain 功能用于分析查询的执行计划,它提供了关键的执行指标,这些指标有助于诊断慢查询并优化索引的使用,当执行一个查询时,MongoDB 需要决定如何从数据库中检索数据,Explain 就可以展示 MongoDB 是如何执行该查询的,包括使用了哪些索引、扫描了多少文档、查询执行的时间等信息,可帮助了解查询性能瓶颈并进行优化

Visual Tree 标签页

以可视化树状结构展示查询执行计划,可更直观地理解查询的执行过程,通过 Explain 功能和 Explain Plan界面,可深入了解 MongoDB 查询的执行过程和性能,从而针对性地进行优化,提高数据库的查询效率

  • PROJECTION_SIMPLE
    • 含义:表示查询中的投影操作,投影操作决定了查询结果中要返回哪些字段,类似于 SQL 中的 SELECT 语句,PROJECTION_SIMPLE 通常代表简单的投影操作,只涉及选择或排除某些字段,例如,在查询 db.collection.find({}, { field1: 1, field2: 1 }) 中,只返回 field1field2 字段,这就是一个投影操作,在 Visual Tree 中可能就会通过 PROJECTION_SIMPLE 体现
  • SORT
    • 含义:表示查询中的排序操作,如果查询使用了 sort() 方法对结果进行排序,比如 db.collection.find().sort({ field: 1 }) ,这里按照 field 字段升序排序,在 Visual Tree 中就会显示 SORT,排序操作可能会对查询性能产生较大影响,尤其是在处理大量数据时,如果没有合适的索引支持,排序可能会导致性能下降
  • COLLSCAN
    • 含义:表示集合扫描,即 MongoDB 需要扫描整个集合中的所有文档来满足查询条件,这通常是一种效率较低的查询方式,尤其是在集合数据量较大时,例如,当查询没有合适的索引支持,或者查询条件需要对整个集合进行遍历才能找到匹配的文档时,就会触发 COLLSCAN ,如 db.collection.find({ field: "value" }),如果 field 字段没有索引,就可能会进行集合扫描
Raw Output 标签页
  • 功能:以原始 JSON 格式展示查询执行计划的详细信息,这个标签页包含了比 Visual Tree 更全面和详细的信息,包括各个操作的具体执行时间、扫描的文档数量、使用的索引等,对于更深入地分析查询性能和进行优化,Raw Output 提供了关键的数据,例如,可以从中查看查询是否使用了索引,索引的使用效率如何,是否存在全表扫描等情况
Query Performance Summary
  • 功能:位于界面最右侧,提供查询性能的总结信息,它会以简洁的方式展示查询的关键性能指标,如查询执行的总时间、扫描的文档数量、返回的文档数量等,通过这个总结信息,可快速了解查询的整体性能,判断查询是否存在性能问题,例如,如果查询执行时间过长,或者扫描的文档数量远大于返回的文档数量,就说明可能需要对查询进行优化,如创建合适的索引

Aggregations:

Aggregations 功能提供了强大的数据处理和分析能力,可以方便地对 MongoDB 中的数据进行复杂的分析和处理,提高数据的利用价值

聚合操作允许对集合中的文档进行分组、过滤、计算和转换等操作,类似于 SQL 中的 GROUP BY、SUM、AVG 等操作,但功能更为强大和灵活,通过聚合管道(Pipeline),可以将多个操作依次组合,对数据进行逐步处理

1. Pipeline

  • 作用:聚合管道是一个由多个阶段(stage )组成的数组,每个阶段都会对输入的文档进行一次转换,并将转换后的结果传递给下一个阶段,常见的阶段包括 m a t c h (过滤文档)、 match(过滤文档)、 match(过滤文档)、group(分组和计算)、 p r o j e c t (投影字段)、 project(投影字段)、 project(投影字段)、sort(排序)等
  • 示例:假设有一个 orders 集合,包含 customerId、amount 等字段,若想计算每个客户的总订单金额,可以使用如下聚合管道:
bash 复制代码
[
    {
        $group: {
            _id: "$customerId",
            totalAmount: { $sum: "$amount" }
        }
    }
]

2. More Options

  • 作用:提供了一些额外的聚合操作配置选项,这些选项可以影响聚合操作的行为和结果

3. SAVE

  • 作用:将当前配置好的聚合管道保存起来,以便后续重复使用,保存后的聚合管道可以在 MongoDB Compass 的界面中快速加载和执行,避免每次都重新配置相同的聚合操作,保存后的语句可以在My Queries中查询

4. CREATE NEW

  • 作用:创建一个新的聚合管道,点击该按钮后,可以开始配置一个全新的聚合操作,设置不同的阶段和选项,以满足不同的数据分析需求
  • 使用场景:当需要对数据进行不同类型的聚合分析时,使用 CREATE NEW 可以快速开始一个新的聚合任务

Schema:

Schema 选项卡能帮助深入了解集合中文档的数据结构和模式

Filter

可以像在 MongoDB 查询中一样输入筛选条件,例如,如果有一个 users 集合,其中包含 age、gender 等字段,若想分析年龄大于 30 岁的用户文档的模式,就可以在 Filter 框中输入 { "age": { "$gt": 30 } } 这样,后续的模式分析就只会基于年龄大于 30 岁的这些文档进行

Analyze

Analyze 按钮用于触发对集合(或者经过 Filter 筛选后的文档子集)的模式分析,它会对指定范围内的文档进行扫描和统计,分析文档中包含的字段、字段的数据类型、字段的出现频率等信息,并以可视化的方式呈现出来

分析结果内容
  • 字段信息:展示集合中文档包含的所有字段,帮助了解文档的整体结构,例如,在一个电商订单集合中,可能会分析出包含 orderId、productName、quantity、totalPrice 等字段
  • 数据类型:明确每个字段的数据类型,如字符串(String)、数字(Number)、日期(Date)、数组(Array)等,这有助于在编写查询和应用程序时正确处理数据,比如,orderId 可能是字符串类型,quantity 是数字类型
  • 字段出现频率:显示每个字段在文档中出现的频率,即有多少文档包含该字段,可帮助发现一些可选字段或经常缺失的字段,例如,在用户集合中,middleName 字段的出现频率可能较低,说明大部分用户没有中间名
可视化展示

分析结果通常以直观的图表和表格形式展示,能够快速理解集合的模式特征,比如,可能会用柱状图展示不同字段的出现频率,用树状图展示文档的嵌套结构等

Indexes:

索引能够帮助 MongoDB 更高效地定位和检索数据,当执行一个查询时,如果没有合适的索引,MongoDB 可能需要扫描整个集合中的所有文档来找到符合条件的文档,这会导致性能显著下降,尤其是在处理大量数据时,而使用索引,MongoDB 可以直接定位到包含所需数据的文档,大大减少了查询所需的时间和资源,这个界面可以用来查询当前集合定义了哪些类型的索引

其中Select a type可分为常见的三种类型:

复合索引(1/-1):

  • 类型选择:若需要基于多个字段组合进行查询,就可以选择复合索引类型,创建时,需要指定多个字段及其排序方向(升序 1 或降序 -1)
  • 适用场景:假设有一个电商订单集合,经常需要根据 productCategory 和 price 字段进行查询,如 db.orders.find({ productCategory: "electronics", price: { $lt: 500 } }) ,此时创建一个复合索引 { productCategory: 1, price: 1 } 能有效提升这类查询的效率,需要注意的是,复合索引中字段的顺序很重要,要根据查询的频率和条件来合理安排字段顺序

文本索引(Text):

  • 类型选择:当需要对文本内容进行全文搜索时,可选择文本索引类型,在 MongoDB 中,一个集合只能创建一个文本索引,但该索引可以包含多个字段
  • 适用场景:对于包含大量文本数据的集合,如新闻文章集合,用户可能需要根据关键词搜索相关文章,例如查询语句 db.articles.find({ $text: { $search: "technology" } }),通过为文章的 title 和 content 字段创建文本索引,就能实现高效的全文搜索

地理空间索引(2dsphere):

  • 类型选择:如果集合中的文档包含地理空间数据(如经纬度坐标),可选择地理空间索引类型,2dsphere 索引用于处理球面坐标(如地球表面的位置)
  • 适用场景:在基于位置的应用中,如查找附近的餐厅、酒店等,假设有一个餐厅集合,每个文档包含餐厅的经纬度信息,通过为这些经纬度字段创建 2dsphere 索引,就可以快速查询出距离某个位置一定范围内的餐厅,例如 db.restaurants.find({ location: { $nearSphere: { $geometry: { type: "Point", coordinates: [longitude, latitude] }, $maxDistance: 1000 } } })

Performance(实时性能监控)

主要提供了对数据库性能相关指标的监控和分析功能,可用于帮助深入了解数据库的运行状况

  • OPERATIONS(操作负载)

    • 展示数据库当前的增删查改的操作频率,能直观反映出数据库的业务繁忙程度
  • READ & WRITE(磁盘 I/O)

    • 提供磁盘读写的速率(Read rate 和 Write rate),单位通常是每秒字节数,高磁盘 I/O 速率可能是因为频繁的读写操作或者磁盘性能不佳
    • 还能查看磁盘 I/O 的等待时间,较长的等待时间可能表示磁盘存在瓶颈
  • NETWORK(网络状态)

    • BYTES IN(入站字节数):指的是从 MongoDB 服务器传输到客户端的字节数量,简单来说,就是客户端从服务器接收的数据量,这些数据可以是查询结果、数据库状态信息等

      • 作用
        • 性能评估:通过监控 BYTES IN 的大小和变化趋势,可以评估数据库查询操作的效率,如果 BYTES IN 过大,可能意味着查询返回了过多的数据,需要优化查询语句,减少不必要的数据传输
        • 资源规划:了解 BYTES IN 有助于规划网络带宽,如果入站数据量持续很高,可能需要考虑升级网络带宽以确保数据传输的流畅性
    • BYTES OUT(出站字节数):表示从客户端发送到 MongoDB 服务器的字节数量,通常是客户端向服务器发送的查询请求、插入或更新的数据等

      • 作用
        • 操作分析:监控 BYTES OUT 可以了解客户端与服务器之间的交互情况,例如,当进行大量的数据插入操作时,BYTES OUT 会显著增加
        • 性能优化:如果 BYTES OUT 过大,可能需要优化客户端代码,减少不必要的数据发送,或者对发送的数据进行压缩处理,以提高网络传输效率
    • CONNECTIONS(连接数):指的是当前与 MongoDB 服务器建立的连接数量,每个客户端应用程序与服务器之间的连接都算作一个连接

      • 作用
        • 资源管理:MongoDB 服务器的资源是有限的,过多的连接可能会导致服务器资源耗尽,影响性能,监控 CONNECTIONS 可以帮助管理员及时发现连接数异常增长的情况,并采取相应的措施,如限制最大连接数、优化应用程序的连接管理等
        • 性能诊断:异常的连接数变化可能暗示着应用程序存在问题,例如,如果连接数突然增加并持续保持在高位,可能是应用程序中存在连接泄漏的问题,需要进行排查和修复
  • 内存使用

    • 显示数据库使用的内存量,包括数据缓存(Data cache)和索引缓存(Index cache)的使用情况,足够的内存缓存可以减少磁盘 I/O,提高查询性能
    • 当内存使用接近服务器的物理内存上限时,可能会出现内存交换(Swapping),严重影响数据库性能
  • HOTTEST COLLECTIONS:指的是在特定时间段内,被访问(读写操作)频率最高的集合,在 MongoDB 中,集合是文档的逻辑分组,类似于关系型数据库中的表,当应用程序频繁地对某些集合进行读写操作时,这些集合就会成为"热门集合"

    • 作用
      • 资源分配:了解哪些集合是最热门的,可以帮助管理员合理分配服务器资源,例如,对于访问频繁的集合,可以考虑将其存储在性能更好的磁盘上,或者为其分配更多的内存缓存,以提高操作性能
      • 性能优化:热门集合往往是性能瓶颈的潜在来源,通过分析热门集合的操作情况,可以找出需要优化的查询或索引,例如为频繁查询的字段添加合适的索引,以减少查询时间
      • 容量规划:监控热门集合的增长趋势,有助于进行容量规划,如果某个热门集合的数据量增长迅速,可能需要提前考虑扩容方案,如分片或迁移数据
  • SLOWEST OPERATIONS:指的是在数据库执行的所有操作中,执行时间最长的那些操作,这些操作可能是查询、插入、更新或删除操作,它们的执行时间过长会影响整个数据库的性能

    • 作用
      • 性能调优:找出最慢的操作是进行性能调优的关键步骤,通过分析这些操作的执行计划和相关代码,可以发现问题所在,如缺少索引、查询语句不合理等,并采取相应的优化措施
      • 问题排查:当数据库出现性能问题时,最慢的操作往往是问题的根源,通过监控这些操作,可以快速定位问题,并及时解决,以提高数据库的响应速度
      • 资源优化:最慢的操作可能会占用大量的系统资源,如 CPU、内存和磁盘 I/O,优化这些操作可以释放资源,提高数据库的整体性能和并发处理能力
相关推荐
云上艺旅8 分钟前
K8S学习之基础十五:k8s中Deployment扩容缩容
学习·docker·云原生·kubernetes·k8s
uhakadotcom10 分钟前
Pandas入门:数据处理和分析的强大工具
后端·面试·github
Asthenia041213 分钟前
Json里面想传图片(验证码图)-Base64编码来助你!
后端
放氮气的蜗牛18 分钟前
C++从入门到精通系列教程之第十篇:异常处理与调试技巧
开发语言·jvm·c++
cmgdxrz22 分钟前
Mysql中的常用函数
数据库·mysql
暴躁的小胡!!!30 分钟前
Linux权限维持之vim python 扩展后门(五)
linux·运维·服务器·网络·安全
亭墨37 分钟前
linux0.11内核源码修仙传第五章——内存初始化(主存与缓存)
linux·c语言·驱动开发·学习·缓存·系统架构
q5673152339 分钟前
用Go的resty库批量下载公开网站视频
开发语言·golang·音视频
服务端技术栈1 小时前
MySQL 索引:数据库查询的“加速器”
后端
Amy.com1 小时前
Linux16-数据库、HTML
jvm·数据库