#はじめに
MongoDBに入ってる固定データを、全て違う値に置換する必要が出来た。
複数のテーブルに同様の値が入っているが、フィールド名が少し違ったりしていて面倒だったので、JavaScriptで処理を書いた。
#やりたいこと
-
userコレクション、enemyコレクションのto_jobフィールドに職業コードが入っている。
コードが変更になったため、全レコードのto_jobフィールドの値を、変更後の値に変えたい。
"aaaaaa" なら "111111"に変更
"bbbbbb" なら "222222"に変更
といった具合に。
主キーは"_id" -
job_masterコレクションで変換したいフィールド名はjob_code。
行う処理は1と同じ。フィールド名だけが違う。
処理は以下の通り
convert.js
// 変換テーブル {変換前 : 変換後}
var jobList = {
"aaaaaa" : "1111111", // swordsman
"bbbbbb" : "2222222", // monk
"cccccc" : "3333333", // lancer
"dddddd" : "4444444", // warrior
"eeeeee" : "5555555", // archer
"ffffff" : "6666666" // witch
};
var convertTable = [
{
"tableName" : "user",
"key" : "to_job",
},
{
"tableName" : "enemy",
"key" : "to_job",
},
{
"tableName" : "job_master",
"key" : "job_code",
}
];
var obj = {};
convertTable.forEach(
function(table){
db.getCollection(table.tableName).find({}).forEach(
function(e){
if (e[ table.key ] != null) {
obj[ table.key ] = jobList[ e[ table.key ] ];
writeResult = db.getCollection(table.tableName).update({"_id":e._id}, { $set : obj } );
// 更新エラー時の対応
if (writeResult.hasWriteError() || writeResult.hasWriteConcernError()) {
print("convert " + table.tableName + " failed. _id = " + e._id + ". " + table.key + " = " + e[ table.key ]);
}
}
}
);
print(table.tableName + " table is finished.");
}
);
print("convert is finished.");
実行
Terminal
mongo {db_name} --quiet convert.js