it编程 > 数据库 > mongodb

关于MongoDB图片URL存储异常问题以及解决

8人参与 2025-04-25 mongodb

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. 对数据库中的现有数据进行定期检查和清理

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Fedora系统安装MongoDB的详细指南

04-08

安装MongoDB过程中出现权限问题的解决策略

04-07

如何在Linux上卸载MongoDB并清理残留文件

04-06

Linux不同发行版安装MongoDB的差异对比

04-05

安装MongoDB后配置环境变量的正确方法

04-03

查看MongoDB服务是否成功启动的方法

04-02

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论