表单数据同步到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 等

MongoDB 示例图


✅ 建议使用场景

  • 对数据有聚合分析、可视化 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