crowiを引っ越しして切れたリンクをMongoDBから全置換するJavascript

はじめに

IP 192.168.1.1 で立てたCrowiを、新規に立てた IP 192.168.1.2 にまるっとお引越しした。
引越し後、ページをあれこれ見てみると、Crowi内の記事に飛べないことがある。

どうやらURLを http://192.168.1.1... と直接書いているところがいっぱいある。。。Oh...

やりたいこと

Crowiの記事データが保存されているMongoDBにつなぎ、問題の文字列を全部置換したい。

前提 今回の対象
CrowiDB名 crowidb
置換元 192.168.1.1
置換先 192.168.1.2
対象コレクション revisions
対象フィールド body

環境によって読み替えてください。
バックアップなどは自己責任でお願いします。

まとめると、、、
crowidbの記事が入っているコレクション(revisions)の本文要素(body)の対象文字列を全て置換します。

処理は以下の通り

replace_crowi_db.js
// MongoDBのcrowidb中、IPを全置換する

var obj = {};
var rgExp = /192.168.1.1/g;
var replaceText = "192.168.1.2";

db.revisions.find({body:rgExp}).forEach(
function(e){
    if (e.body != null) {
        obj.body = e.body.replace(rgExp, replaceText);
        writeResult = db.revisions.update({"_id":e._id}, { $set : obj } );
        if (writeResult.hasWriteError() || writeResult.hasWriteConcernError()) {
            // 更新エラー
            print("Replace faild : _id = " + e._id );
        }
    }
});
print("置換完了");

実行

Terminal
mongo crowidb --quiet replace_crowi_db.js 

参考にした記事

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.