1. 程式人生 > 資料庫 >在Navicat裡連線MongoDB,使用查詢語句正則匹配修改內容

在Navicat裡連線MongoDB,使用查詢語句正則匹配修改內容

業務場景

  • 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);
});