当前位置: 首页 > news >正文

MongoDB 图片 URL 存储异常问题解决方案

项目场景:

在开发一个在线考试系统时,前端需要提交学生的答题截图到后端,后端使用 MinIO 存储图片并保存图片 URL 到 MongoDB 数据库。系统需要支持多次提交图片,并将所有图片 URL 以数组形式存储在 MongoDB 的 screenShot 字段中。

问题描述

当存储少量图片时,URL 显示正常(如 @http://10.100.157.90:9200/test-bucket/exam_1.png),但当图片数量增多后,screenShot 字段存储的内容变成了多层嵌套的 JSON 字符串,包含大量转义字符和斜杠,例如:

"screenShot": ["{\"screenShot\": [\"{\\\"screenShot\\\": [\\\"{\\\\\\\"screenShot\\\\\\\": [\\\\\\\"...\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]}\"]}"]

原因分析:

  1. 数据序列化问题:每次保存新图片时,系统从数据库获取现有的 screenShot 字段内容,但没有正确处理可能已经存在的 JSON 字符串
  2. 嵌套序列化:每次更新时,整个数组被错误地序列化为 JSON 字符串,然后作为新元素添加到数组中
  3. 缺乏数据清理:系统没有对从数据库读取的已有数据进行清理和验证,导致问题不断累积
  4. MongoDB 操作不当:更新 MongoDB 字段时,可能使用了不恰当的序列化方式

解决方案:

1.使用 MongoDB 的数组操作符(如 $push)直接更新数组,而不是替换整个字段

2.或者使用数据清理(可选,不建议)

预防措施:

  1. 在数据存储前进行严格的格式验证
  2. 添加单元测试验证数据序列化和反序列化逻辑
  3. 对数据库中的现有数据进行定期检查和清理

相关文章:

  • React 实现爱心花园动画
  • AWS Glue ETL设计与调度最佳实践
  • 2025上海车展 | 移远通信48 TOPS座舱方案落地加速,AI大模型赋能多域融合新突破
  • 【器件专题1——IGBT第1讲】IGBT:电力电子领域的 “万能开关”,如何撑起新能源时代?
  • Estimands与Intercurrent Events:临床试验与统计学核心框架
  • 高等数学第一章---函数与极限(1.8连续函数及其连续性)
  • C++初窥门径
  • 三格电子——如何解决工业场景中以太网设备布线不方便的问题
  • Linux 系统用户管理与权限掌控:从基础到精通
  • Framework模块编译脚本利器
  • 1688商品采集|下单接口实战演示(含请求示例)
  • 【C语言练习】003. 声明不同数据类型的变量并赋值
  • Python图形界面编程(二)
  • TCP协议理解
  • c#接口_抽象类_多态学习
  • Golang日志模块之xlog
  • Linux字符设备驱动开发的详细步骤
  • Vue3实现高仿word自定义颜色选择器组件(支持 v-model)
  • 矩阵运营:抢占市场与流量的利器
  • 如何避免IDEA每次打开新项目都重复配置Maven?
  • 中越海警2025年第一次北部湾联合巡逻圆满结束
  • 韩国首尔江南区一大型商场起火,消防部门正在灭火中
  • 国防部:“台独”武装摆练纯属搞心理安慰,怎么演都是溃败的死局
  • 西安市优化营商环境投诉举报监督平台上线,鼓励实名检举控告
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿
  • 爱奇艺要转型做微剧?龚宇:是误解,微剧是增量业务,要提高投资回报效益