在Navicat裡連線MongoDB,使用查詢語句正則匹配修改內容
阿新 • • 發佈:2020-02-05
業務場景
- CMS,內容管理系統,主要是新增編輯新聞,釋出新聞
- 使用MySQL儲存新聞的各個欄位,使用MongoDB儲存文章正文(帶樣式的正文比較大)
- 某網站升級改版,使用新系統。資料和附件遷移後,發現正文中的圖片連結是訪問原有的老系統檔案服務的。老的系統不久後會關閉,檔案附件已經拷貝過來。需要把老的圖片附件連結,換成新的絕對路徑的。
解決
- 使用Navicat連線MongoDB
- 使用查詢功能,編寫查詢替換語句
- 核心是正則匹配,正則替換,替換完成後再更新記錄即可
- 可以找出規則,寫出正則;先找一條測試,再整個collection執行
- 單個測試
// http://file.hnxf.huainan.gov.cn//584782d db.contentMongoEO.find({ "_id":551494506 }).forEach(function(result){ var newstr=result.content; newstr=newstr.replace(/http:\/\/file.hnxf.huainan.gov.cn\/\/584782d/g,"/oldfiles/xfjoldfiles/584782d"); print(newstr); result.content=newstr; db.contentMongoEO.save(result); });
- 測試沒問題,整個執行
db.contentMongoEO.find({ 'content':{'$regex':/http:\/\/file.hnxf.huainan.gov.cn\/\/584782d/} }).forEach(function(result){ var newstr=result.content; newstr=newstr.replace(/http:\/\/file.hnxf.huainan.gov.cn\/\/584782d/g,"/oldfiles/xfjoldfiles/584782d"); //print(newstr); result.content=newstr; db.contentMongoEO.save(result); });