2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MongoDBのフィールドの値を一括変換するJavaScript

Last updated at Posted at 2016-01-18

#はじめに
MongoDBに入ってる固定データを、全て違う値に置換する必要が出来た。
複数のテーブルに同様の値が入っているが、フィールド名が少し違ったりしていて面倒だったので、JavaScriptで処理を書いた。

#やりたいこと

  1. userコレクション、enemyコレクションのto_jobフィールドに職業コードが入っている。
    コードが変更になったため、全レコードのto_jobフィールドの値を、変更後の値に変えたい。
     "aaaaaa" なら "111111"に変更
     "bbbbbb" なら "222222"に変更
    といった具合に。
    主キーは"_id"

  2. 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
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?