xiaohack's Blog - MongoDB
type: channel
link: https://blog.xiaohack.org/tag/mongodb/
items: 教程：构建基于 Coreflux MQTT 与托管数据库的IoT数据管道
items: Apifox 1 月更新｜MCP 调试、测试套件、测试报告重构、网络信息查看、Hoppscotch 导入
items: Spring Boot 3 集成 Apache Calcite：多数据源查询的终极解决方案
items: MongoBleed 漏洞允许攻击者从 MongoDB 的堆内存中读取数据

教程：构建基于 Coreflux MQTT 与托管数据库的IoT数据管道
type: item
date: 2026-02-03T16:06:19+08:00
description: 使用托管数据库部署 Coreflux MQTT 代理MQTT 代理 通过发布-订阅消息模式连接物联网设备和应用程序，使其成为现代 物联网 基础设施的重要组成部分。Coreflux 是一个 低代码 MQTT 代理，增加了实时数据处理和转换功能，让你可以直接与 DigitalOcean 托管数据库（包括 MongoDB、PostgreSQL、MySQL 和 OpenSearch）集成，而无需编写自定义集成代码。你将学到什么： 本教程将引导你部署一个完整的物联网数据管道——从在 DigitalOcean 上设置托管数据库集群和 Coreflux MQTT 代理，到配置安全的 VPC 网络、使用 Coreflux 的物联网语言 (LoT) 构建数据转换模型，以及自动将处理后的物联网数据存储到你选择的数据库中。最终你将获得一个可用于生产环境的设置，能够处理物联网应用的实时消息传递和持久存储。关键要点在深入了解分步部署过程之前，以下是你将学到的关键点：在 DigitalOcean 上部署托管数据库集群（PostgreSQL、MongoDB、MySQL 或 OpenSearch），用于可扩展的物联网数据存储。使用 Marketplace 镜像或 Docker 在 DigitalOcean Droplet （DigitalOcean的VPC）上设置 Coreflux MQTT 代理。创建安全的 VPC 网络以连接你的 MQTT 代理和数据库，无需公开暴露。使用 Coreflux 的物联网语言 (LoT) 构建实时数据管道，实现低代码物联网自动化。自动转换和存储物联网数据，从 MQTT 主题到数据库表、集合或索引。验证端到端数据流，从模拟传感器通过转换模型到数据库存储。本教程为需要实时消息传递结合持久数据存储以及搜索、分析或关系查询等高级功能的物联网应用提供了一个可用于生产环境的基础。你将构建什么在本教程结束时，你将得到：一个用于可扩展存储的托管数据库集群（PostgreSQL、MongoDB、MySQL 或 OpenSearch）一台运行 Coreflux MQTT 代理的 DigitalOcean Droplet一个用于安全 物联网通信的虚拟私有云 (VPC) 网络使用 LoT Notebook 扩展进行的实时数据模拟低代码数据转换模型和数据库集成路由用于 物联网自动化 的完整 数据集成与转换 管道Coreflux 与 DigitalOcean 合作Coreflux 通过物联网语言编程语言在 DigitalOcean 云平台上提供轻量级 MQTT 代理和数据管道工具，以实现高效的物联网通信。什么是 MQTT？MQTT（消息队列遥测传输）是一种轻量级的、发布-订阅网络协议，在物联网生态系统中被广泛采用。专为受限设备和低带宽、高延迟或不稳定的网络设计，MQTT 能够在带宽受限的环境中实现高效、实时的消息传递。关于 CorefluxCoreflux 提供了一个轻量级 MQTT 代理，以促进物联网设备与应用程序之间的高效、实时通信，包括每个用例所必需的实时数据转换功能。为可扩展性和可靠性而构建，Coreflux 专为低延迟和高吞吐量至关重要的环境量身定制。无论你是构建一个小型物联网项目还是部署工业监控系统，Coreflux 都能处理设备之间的消息路由和数据流。在 DigitalOcean 云平台上使用 Coreflux，你将获得：数据处理： 在你的数据所在之处集中处理你的数据处理需求，确保实时数据处理。数据集成： 轻松与其他 DigitalOcean 服务（如托管数据库 PostgreSQL、MongoDB、MySQL 或 OpenSearch）集成，确保为你的所有数据需求提供一个单一且简单的生态系统。可扩展性： 轻松处理不断增长的数据和设备数量，而不会影响性能。可靠性： 确保在所有连接的设备之间进行一致且可靠的消息传递。准备工作在开始本 MQTT 代理 部署教程之前，你需要：一个 DigitalOcean 帐户，可在DigitalOcean.com注册，支持绑定信用卡、支付宝或数字货币了解 MQTT 协议概念和 物联网 架构Visual Studio Code（用于 LoT Notebook 扩展）预计时间： 本教程大约需要 30-45 分钟完成，具体取决于数据库配置时间（通常每个数据库集群需要 1-5 分钟）。步骤 1 — 为物联网自动化创建网络基础设施为安全的 MQTT 通信创建 VPC 网络首先，你将创建一个虚拟私有云 (VPC)，以确保你的 物联网 服务和 MQTT 代理 之间的安全通信，无需公开访问。登录你的 DigitalOcean 控制面板从左侧导航栏进入 网络 → VPC点击 创建 VPC 网络为物联网自动化配置你的 VPC：名称…

Apifox 1 月更新｜MCP 调试、测试套件、测试报告重构、网络信息查看、Hoppscotch 导入
type: item
date: 2026-01-29T18:01:04+08:00
description: Apifox 新版本上线啦！看看本次版本更新主要涵盖的重点内容，有没有你所关注的功能特性：支持创建 MCP Client 以调试 MCP Server支持创建「测试套件」测试报告全面重构，支持结构化展示调试能力持续升级支持查看 HTTP 版本、TLS 协议等网络信息array 类型参数的子元素支持直接选择枚举值调试 SSE 接口时，支持 \r\n 换行符支持导入 Hoppscotch 的 Collection优化邀请他人加入项目的流程用户反馈优化解决 MongoDB 数据库的密码包含特殊字符 % 时无法连接成功的问题解决绑定了手机号的用户无法通过“忘记密码”功能重置密码的问题将 Apifox 更新至最新版，一起开启全新体验吧！支持创建 MCP Client 以调试 MCP ServerApifox 升级后，支持创建 MCP Client，开发者可以像调试 API 一样，直接调试 MCP Server 的Tools、Resources和 Prompts。同时支持STDIO和 Streamable HTTP 协议，并可自动配置 OAuth 2.0 认证流程，极大简化连接与认证流程，全面提升 AI Agent 的开发与调试效率。更多关于 MCP 的内容，可以前往 帮助文档查看。支持创建「测试套件」Apifox 推出了「测试套件」功能，支持添加单接口用例和场景用例，并可在「静态」与「动态」两种模式间切换：静态模式用于精确指定需要执行的测试项，内容不会变动，且支持灵活调整测试步骤的顺序。动态模式可通过规则自动筛选需执行的测试项。每次运行时，系统会实时扫描项目，将所有符合条件的最新用例纳入执行。此模式下，仅可整体删除或修改过滤条件，无法单独删除组内的某个动态项。场景用例侧重于测试流程的编排，测试套件则聚焦于灵活高效的测试执行，两者并非互相替代，而是分层协作，面向不同的使用场景，结合使用可以满足自动化测试的多样化需求。更多关于测试套件的具体教程，可以查看往期内容《 测试用例越堆越多？用 Apifox 测试套件让自动化回归更易维护》。测试报告全面重构，支持结构化展示最新版本的 Apifox 对测试报告界面进行了全面重构，新版测试报告支持结构化展示所有测试步骤，让测试结果的层次关系更加清晰明了。用户可以快速定位每个测试步骤的执行情况和结果，从而更高效地分析测试问题，提升测试结果的可读性和分析效率。调试能力持续升级支持查看 HTTP 版本、TLS 协议等网络信息更新 Apifox 后，开发者在调试接口时可直接查看 HTTP 版本、TLS 协议等详细网络信息，从而快速掌握接口请求的通信细节，有助于进行更精确的问题定位和性能分析。同时，支持查看更详细的响应大小信息，包括 Body 和 Header 的大小，以及压缩前后的 Body 大小，便于判断 gzip 等压缩功能是否正常工作。array 类型参数的子元素支持直接选择枚举值调试接口时，如果 array 类型参数的子元素包含枚举值，用户可直接从列表中选择，无需手动输入，简化了配置流程，提升参数配置的便捷性与准确性，使接口调试更加高效流畅。调试 SSE 接口时，支持 \r\n 换行符Apifox 优化了 SSE 接口的调试体验。SSE 规范采用 \n\n 作为标准换行符，但一些实际业务中常用 \r\n （Windows 换行符） 进行分隔。Apifox 现已兼容并正确解析 \r\n 换行符，确保 SSE 流式数据能够以标准或非标准格式都能正确显示，帮助开发者更高效、准确地调试和验证 SSE 接口响应内容。支持导入 Hoppscotch 的 CollectionApifox 现已支持导入 Hoppscotch Collection 数据，帮助团队更便捷地将 Hoppscotch 项目迁移到 Apifox，进一步扩展了数据迁移的兼容性，降低迁移成本，提升团队协作的灵活性。优化邀请他人加入项目的流程Apifox 对项目成员邀请流程进行了优化，除了链接邀请和邮箱邀请外，还支持直接从团队成员列表中选择成员加入项目，并可在邀请时同步设置项目权限，大幅简化了成员管理流程，让团队协作配置更加便捷高效。用户反馈优化解决 MongoDB 数据库的密码包含特殊字符%时无法连接成功的问题根据用户反馈，我们已修复 MongoDB 数据库连接中存在的问题：当数据库密码包含特殊字符 % 时，Apifox 现能正确处理并成功建立连接，进一步提升了数据库连接功能的稳定性和兼容性。解决绑定了手机号的用户无法通过“忘记密码”功能重置密码的问题现在通过"忘记密码"功能可以正常重置密码，确保用户在需要时能顺利找回账号访问权限，提升账户安全管理功能的完整性与可用性。了解更多当然，Apifox 产品团队为大家带来的新功能远不止以上这些：优化了前后…

Spring Boot 3 集成 Apache Calcite：多数据源查询的终极解决方案
type: item
date: 2026-01-26T15:22:46+08:00
description: 熟悉 Spring Boot 3 的开发者，都知道它在简化开发流程、提高开发效率方面的出色表现吧！但是，在实际业务场景中，大家肯定都碰到过这样的棘手问题：订单数据存放在 MySQL 里，库存数据在 PostgreSQL 中，用户数据又保存在 MongoDB 中，当多种数据源同时存在时，想要实现统一查询简直比登天还难。所以呢，今天我就亮出我的“终极大招”——Apache Calcite，着重给大家讲讲它怎样与 Spring Boot 3 实现无缝集成，还会分享一些可以直接拿来使用的经典应用场景。掌握了这一招，多数据源查询的难题就能轻松解决啦！一、核心认知：Apache Calcite 为何是多数据源查询的利器？在动手集成前，咱们先把核心逻辑搞明白：为啥 Calcite 能成为多数据源查询的“万能钥匙”？它的核心优势到底在哪？1.1 不止是查询引擎：Calcite 的核心定位Apache Calcite 本质是一个动态数据管理框架，而非传统的数据库。它最核心的价值在于“解耦”——将数据存储与数据查询分离，无论数据存在哪里、是什么格式，都能通过统一的 SQL 接口进行查询。说通俗点，Calcite 就像个“超级数据翻译官”——不管数据藏在哪个数据源里、是什么格式，你只要写一套标准 SQL，它就能翻译成对应数据源能懂的指令，最后把结果整理成统一格式返回。这也是它能搞定多数据源查询的核心秘诀！1.2 Calcite 的核心能力拆解统一 SQL 接口：支持标准 SQL，无论底层是关系型数据库（MySQL、PostgreSQL）、非关系型数据库（MongoDB、Redis），还是文件（CSV、Parquet）、大数据引擎（Hive、Spark），都能通过同一套 SQL 查询。强大的查询优化：内置基于规则和成本的查询优化器，能自动优化 SQL 执行计划，提升查询效率，尤其是在复杂多表关联、跨数据源查询场景下，优化效果明显。灵活的数据源适配：通过“适配器（Adapter）”机制适配不同数据源，社区已提供大量现成适配器，也支持自定义开发，适配特殊数据源。轻量级集成：核心依赖体积小，无复杂依赖，可轻松集成到 Spring Boot、Spring Cloud 等主流 Java 开发框架中，无需单独部署独立服务（也支持独立部署）。二、重点实战：Spring Boot 3 集成 Calcite 核心步骤既然大家都熟悉 Spring Boot 3 的基础操作，我就不啰嗦项目搭建这些常规步骤了，直接聚焦 Calcite 集成的核心环节，每一步都附完整代码和避坑提醒，跟着做就能成！2.1 核心依赖引入第一步先引依赖，在 pom.xml 里加好 Calcite 核心包、对应数据源的适配器，再配上 MyBatis Plus 的核心依赖（替换掉原来的 Jdbc 依赖就行），具体如下： <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-core</artifactId> <version>1.36.0</version> </dependency> <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-mysql</artifactId> <version>1.36.0</version> </dependency> <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-mongodb</artifactId> <version>1.36.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.20</version> </dependency>这里有 3 个避坑点必须强调下：Calcite 所有组件版本要统一，不然容易出现类加载异常；MyBatis Plus 得选适配 Spring Boot 3 的版本（3.5.3+）；一定要加连接池依赖，不然 Calcite 数据源没法被 MyBatis Plus 正常管理。2.2 核心配置：C…

MongoBleed 漏洞允许攻击者从 MongoDB 的堆内存中读取数据
type: item
date: 2026-01-12T18:02:44+08:00
description: MongoDB 最近修补了CVE-2025-14847，这是一个影响多个支持和遗留 MongoDB 服务器版本的漏洞。根据披露，该漏洞可以被未认证的攻击者以较低的复杂度远程利用，可能导致敏感数据和凭证的外泄。 这个漏洞被称为 MongoBleed，以臭名昭著的Heartbleed命名，CVSS 得分为8.7，由对 zlib 压缩网络流量处理不当触发，允许未经身份验证的攻击者泄露未初始化的内存，并可能从受影响的 MongoDB 服务器窃取敏感数据，如凭证或令牌。根据Wiz的安全研究人员，该漏洞正在被广泛利用。 正如 MongoDB 的声明所述，MongoDB Atlas 上的托管实例已经被修补，但是如果自托管 MongoDB 不更新，仍然存在风险。强烈建议组织立即应用安全补丁，或禁用压缩并限制网络暴露。Merav Bar、Amitai Cohen、Yaara Shriki 和 Gili Tikochinski 解释： CVE-2025-14847 源于 MongoDB 服务器基于 zlib 的网络消息解压缩逻辑中的一个缺陷，该逻辑在认证之前进行了处理。通过发送畸形的压缩网络数据包，未经身份验证的攻击者可以触发服务器错误处理解压缩的消息长度，导致返回给客户端未初始化堆内存。 根据 Wiz 文章，42%的云环境中至少有一个易受攻击的 MongoDB 实例，Censys 报告称全球大约有 87,000 台服务器存在潜在的风险。由于该漏洞可以在没有认证或用户交互的情况下被利用，暴露在互联网上的数据库服务器面临特别高的风险。Wiz 团队补充道： 在代码层面，这个漏洞是由 message_compressor_zlib.cpp 中的错误长度处理引起的。受影响的逻辑返回了分配的缓冲区大小（output.length()），而不是实际解压缩数据的长度，从而允许过小或畸形的有效载荷暴露相邻的堆内存。 这个漏洞影响了自2017年以来发布的所有 MongoDB 版本。Linkfields Innovations 的软件开发人员 Gourav Boiri评论道： MongoBleed 突出了即使是成熟的数据库，当暴露或打补丁时，也可能成为关键的攻击面。预认证内存泄露、主动漏洞攻击和 87K+暴露实例——提醒我们，数据库安全就是基础设施安全。 在“简单解释MongoBleed”的文章中，Stanislav Kozlovski解释了这一漏洞的工作原理，并警告说： 它非常容易被利用——只需要连接到数据库（不需要认证）。截至撰写本文时，它已经被修复，但一些 EOL 版本（3.6、4.0、4.2）将不会得到修复。 InfoSec 创始人和实践者Eric Capuano解释了如何从日志中检测数据库服务器是否被利用。在一个流行的Reddit帖子中，用户 misteryuub 争论道： 很多人争论说开源代码比闭源代码更安全，或者安全问题会在开源代码中更快被发现。这种级别的漏洞存在是对这个论点的反驳。 Kozlovski 不同意： 当人们说开源更安全时，他们通常指的是有活跃社区的开源项目。Mongo 在 2017 年似乎没有这个，因为引入这个漏洞的 PR 没有在公共 GitHub 上被审查。 MongoDB补丁版本现在可用于从 4.4 到 8.0 的所有支持版本。像Percona Server for MongoDB这样的分支也受到上游漏洞的影响。 https://www.infoq.com/news/2026/01/mongodb-mongobleed-vulnerability/