MongoDB Charts是MongoDB官方推出的原生可视化工具,最大的特点是直接对数据库中的文档执行聚合操作来生成图表,中间不需要导出数据,也不依赖任何第三方BI工具。对已经在使用MongoDB Atlas的团队来说,开箱即用是它最吸引人的地方。本文将完整讲解mongodb-atlas-charts的图表制作流程,包括环境准备、数据源配置、各类图表的搭建方法以及实际使用中的优化技巧。

一、MongoDB Charts是什么,适合哪些场景
MongoDB Charts本质上是一个运行在聚合管道之上的可视化层。它把用户在界面上拖拽字段的操作,自动翻译成MQL聚合查询发给数据库,结果再渲染成图表。这意味着图表始终反映的是数据库的实时状态,不存在传统方案里"先导出CSV再导入Excel"带来的数据延迟。
它的典型使用场景包括:内部运营看板(订单金额趋势、用户增长曲线)、埋点数据分析(页面访问量、按钮点击分布)、设备监控大屏(IoT传感器数据的实时展示)以及对外的数据展示页。因为Charts支持把单个图表通过嵌入方式发布到任意网页,做一些公开的统计页面也很方便。
当然它也有局限。如果需要复杂的多数据源关联分析、复杂的数据建模或企业级的报表权限体系,专业的BI工具仍然更合适。Charts的定位是"MongoDB数据的快速可视化",越靠近这个定位,它的效率优势越明显。
二、在MongoDB Atlas中启用Charts并连接数据源
如果你使用的是Atlas云服务,启用Charts非常简单。登录Atlas控制台,在项目左侧导航中找到Charts服务,点击激活即可,免费集群同样可以使用,只是图表数量和并发有限制。激活后系统会为你的项目分配一个Charts工作区。
进入工作区后第一步是添加数据源。点击Data Sources,选择要连接的集群和数据库,然后指定具体的集合或视图。这里有一个值得注意的细节:Charts支持把聚合管道保存为视图(View)后再作为数据源使用,对于需要预处理的复杂统计,先在数据库层建好视图会让图表配置简洁很多。
假设我们有一个存储销售订单的集合orders,文档结构大致如下:
{
"_id": ObjectId("65a1b2c3d4e5f6a7b8c9d0e1"),
"orderId": "SO-20240001",
"customer": { "name": "张三", "city": "杭州", "level": "VIP" },
"items": [
{ "productId": "P1001", "name": "机械键盘", "price": 399, "qty": 2 },
{ "productId": "P1002", "name": "无线鼠标", "price": 129, "qty": 1 }
],
"totalAmount": 927,
"status": "paid",
"createdAt": ISODate("2024-01-15T08:30:00Z")
}针对这种嵌套文档,Charts的字段面板会自动展开子字段,items这样的数组字段还可以通过展开方式逐元素统计,这一点比很多工具的手动配置省事不少。
三、制作第一张图表:字段映射与图表类型选择
点击Dashboards新建一个仪表盘,然后Add Chart进入图表编辑器。编辑器分为三栏:左侧是字段列表,中间是画布预览,右侧是图表类型和聚合设置。制作图表的核心动作就是把字段拖到对应的Channel(通道)里。
以"各城市订单金额统计"为例,做一张柱状图:把customer.city拖到X轴通道,把totalAmount拖到Y轴通道,聚合函数选择Sum。Charts会立刻生成查询并渲染结果,整个过程不需要写任何代码。如果切换到Query栏,还能看到它生成的MQL语句,例如:
[
{ "$group": {
"_id": "$customer.city",
"value": { "$sum": "$totalAmount" }
}},
{ "$sort": { "value": -1 } },
{ "$limit": 1000 }
]图表类型的选择有基本规律:分类对比用柱状图或条形图,占比构成用饼图或环形图,时间趋势必须用连续面积图或折线图,地理分布用地图图表,数据之间的相关性可以用散点图。特别提醒一点,饼图的扇区数量尽量控制在6个以内,类别太多时Charts提供了"其他"归组功能,勾选之后会把占比小的类合并显示,可读性会好很多。
四、进阶技巧:筛选器、计算字段与时间序列
真实看板几乎都离不开筛选。Charts支持两种筛选方式:图表级筛选和仪表盘级筛选。仪表盘级筛选更实用,配置一次,页面上所有图表都会联动。比如添加一个基于createdAt的日期范围筛选器,再添加一个基于customer.level的下拉筛选,运营人员就能快速切换查看不同时间段、不同会员等级的数据。
对于源数据中没有直接提供的指标,可以使用计算字段。例如想统计订单的件数,可以对items数组做投影:
// 在Charts的计算字段中定义 orderQty
{
"$reduce": {
"input": "$items",
"initialValue": 0,
"in": { "$add": ["$$value", "$$this.qty"] }
}
}把这个计算字段拖到Y轴并选择Sum聚合,就得到了每个城市的销售件数。时间序列图表则要注意把日期字段拖到X轴后,选择合适的时间粒度(按天、按周、按月),数据量大时适当放粗粒度能显著提升加载速度。
另一个实用功能是数值格式化。在Y轴设置中可以配置数字格式为货币、百分比或自定义小数位,大额数字开启缩写显示(例如12.5万),看板的整体观感会专业很多。
五、权限、嵌入与性能注意事项
权限方面,Charts直接继承Atlas的数据库角色。编辑图表需要对该集合有读权限,而通过嵌入方式对外发布时要格外小心:嵌入支持两种鉴权模式,匿名访问适合公开数据,而通过后端生成签名Token的方式适合需要登录的业务系统,切勿把敏感数据的图表用匿名模式直接暴露出去。
性能优化上有几个要点。第一,图表默认会限制返回文档数,遇到大数据量集合时,务必为聚合中出现的筛选字段和分组字段建立索引,否则每次刷新都是全集合扫描。第二,合理利用仪表盘的自动刷新间隔,不要设置过短的刷新周期给数据库造成压力。第三,对于亿级数据,建议预先用定时任务把明细聚合到汇总集合,Charts直接查汇总集合,响应速度可以从十几秒降到几百毫秒。
最后补充一点,除了Atlas托管的版本,MongoDB还提供了Docker镜像形式的Charts本地部署方案,使用docker run拉取mongodb/charts镜像即可在内网环境搭建,配置流程与云端版本基本一致,这对数据不允许出内网的企业来说是唯一选择。整体来看,只要数据在MongoDB里,Charts就是搭建可视化看板成本最低的方案之一,值得花一两个小时上手试试。
MongoDB Chartsmongodb-atlas-chartsMongoDB图表制作修改时间:2026-09-04 16:20:44