關于MongoDB圖片URL存儲異常問題以及解決
MongoDB圖片URL存儲異常問題
項目場景
在開發(fā)一個在線考試系統(tǒng)時,前端需要提交學生的答題截圖到后端,后端使用 MinIO 存儲圖片并保存圖片 URL 到 MongoDB 數(shù)據(jù)庫。
系統(tǒng)需要支持多次提交圖片,并將所有圖片 URL 以數(shù)組形式存儲在 MongoDB 的 screenShot
字段中。
問題描述
當存儲少量圖片時,URL 顯示正常(如 @http://10.100.157.90:9200/test-bucket/exam_1.png
)
但當圖片數(shù)量增多后,screenShot
字段存儲的內(nèi)容變成了多層嵌套的 JSON 字符串,包含大量轉(zhuǎn)義字符和斜杠
例如:
"screenShot": ["{\"screenShot\": [\"{\\\"screenShot\\\": [\\\"{\\\\\\\"screenShot\\\\\\\": [\\\\\\\"...\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]}\"]}"]
原因分析
- 數(shù)據(jù)序列化問題:每次保存新圖片時,系統(tǒng)從數(shù)據(jù)庫獲取現(xiàn)有的
screenShot
字段內(nèi)容,但沒有正確處理可能已經(jīng)存在的 JSON 字符串 - 嵌套序列化:每次更新時,整個數(shù)組被錯誤地序列化為 JSON 字符串,然后作為新元素添加到數(shù)組中
- 缺乏數(shù)據(jù)清理:系統(tǒng)沒有對從數(shù)據(jù)庫讀取的已有數(shù)據(jù)進行清理和驗證,導致問題不斷累積
- MongoDB 操作不當:更新 MongoDB 字段時,可能使用了不恰當?shù)男蛄谢绞?/li>
解決方案
1.使用 MongoDB 的數(shù)組操作符(如 $push
)直接更新數(shù)組,而不是替換整個字段
2.或者使用數(shù)據(jù)清理(可選,不建議)
預防措施
- 在數(shù)據(jù)存儲前進行嚴格的格式驗證
- 添加單元測試驗證數(shù)據(jù)序列化和反序列化邏輯
- 對數(shù)據(jù)庫中的現(xiàn)有數(shù)據(jù)進行定期檢查和清理
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于SpringBoot和Vue3的博客平臺文章列表與分頁功能實現(xiàn)
在前面的教程中,我們已經(jīng)實現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導您實現(xiàn)博客平臺的文章列表與分頁功能,需要的朋友可以參考閱讀2023-04-04Java實現(xiàn)經(jīng)典游戲飛機大戰(zhàn)-I的示例代碼
《飛機大戰(zhàn)-I》是一款融合了街機、競技等多種元素的經(jīng)典射擊手游。本文將利用java語言實現(xiàn)這游戲,文中采用了swing技術(shù)進行了界面化處理,感興趣的可以了解一下2022-02-02使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired
有了@RequiredArgsConstructor注解,我們就可以減少@Autowired的書寫,本文主要介紹了使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired,感興趣的可以了解一下2022-04-04IDEA創(chuàng)建的maven項目中pom.xml增加新依賴無效問題及解決
在IDEA中,解決maven項目pom.xml增加依賴但外部庫未更新的問題,可以通過設置"構(gòu)建腳本更改后同步項目"選項為"任何更改",然后刷新Maven項目來解決2025-01-01