表单数据同步到Mongdb
表单数据同步 MongoDB 使用指南
🆕 功能上线于 v2.4 版本 🚀 适用于需要更强数据分析能力的场景
为什么要同步到 MongoDB?
系统默认将表单数据存储在 MySQL 的 JSON 字段中,但:
- MySQL JSON 字段在多维分析、聚合查询场景下性能较差
- 若需实现实时可视化分析、嵌套查询等需求,推荐将数据同步到 MongoDB
最终效果:MySQL 和 MongoDB 中都保留一份数据副本,可灵活使用。
1. 配置 MongoDB 连接
🔧 修改配置文件
打开后端 application.yml 文件,增加 MongoDB 配置项:
spring:
data:
mongodb:
host: 127.0.0.1
port: 27019
database: tduck
username: admin
password: tduck@mongdb123
authentication-database: admin
platform:
form-data:
storage-strategy: mongodb
⚠️ 移除自动配置排除项
系统默认禁用了 MongoDB 的自动配置,需移除以下配置项:
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
2. 同步机制说明
配置完成后,系统会自动同步表单数据到 MongoDB,无需额外操作。
✅ 同步触发时机:
| 操作类型 | MySQL 状态 | MongoDB 状态 |
|---|---|---|
| 新增 | 插入 | 插入 |
| 修改 | 更新 | 更新 |
| 删除 | 逻辑删除(标记) | 不删除,需彻底删除 |
🗑️ 彻底删除操作:进入表单 → 回收站 → 彻底删除后,MongoDB 中对应数据才会被删除。
MongoDB 集合命名方式:
- 每个表单在 MongoDB 中对应一个集合
- 集合名称为表单的
formKey - 每个题目字段将作为文档字段存储
3. 扩展与二次开发
手动全量同步历史数据
若已有大量历史表单数据,需手动执行同步逻辑:
com.tduck.cloud.upgrade.service.sync.SyncFormDataToMongoService#syncData(String formKey)
数据变动钩子方法(可扩展其他数据库)
可重写以下方法将数据同步到其他存储:
FormDataUtils.syncAddDocument()
FormDataUtils.syncUpdateDocument()
FormDataUtils.syncDeleteDocument()
示例截图(参考)
MongoDB 中每条表单数据如下图所示:
| 题目字段 | 用户答案 | 系统字段 |
|---|---|---|
| name | 张三 | _id、formKey、createTime 等 |

✅ 建议使用场景
- 对数据有聚合分析、可视化 BI 报表需求
- 有 Elasticsearch、Kafka 等大数据平台接入
- 使用 MongoDB 原生聚合管道实现复杂报表
常见问题
如果配置后 mongdb 没有写入数据等情况,请打开 mongdb 的日志,提交数据看下输入的日志是否连接到 mongdb 等,以及有其他有用信息。如果已经存在 logging 的配置需要合并进去。
logging:
level:
com.tduck.cloud: debug
org.springframework.data.mongodb.core.MongoTemplate: DEBUG
org.springframework.data.mongodb.core: DEBUG
org.mongodb.driver: DEBUG
config: classpath:logback-spring.xml