2012-10-11 17:05:30 -06:00
|
|
|
var gamesToMigrate = db.game2.find();
|
|
|
|
var max = gamesToMigrate.count();
|
|
|
|
var batchSize = 10000;
|
|
|
|
var collection = db.game3;
|
2012-10-12 14:37:34 -06:00
|
|
|
var pgnCollection = db.pgn;
|
2012-10-11 17:05:30 -06:00
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
print('Migrating ' + max + ' games');
|
2012-10-11 17:05:30 -06:00
|
|
|
|
|
|
|
collection.drop();
|
2012-10-12 14:37:34 -06:00
|
|
|
pgnCollection.drop();
|
2012-10-11 17:05:30 -06:00
|
|
|
|
|
|
|
function rename(arr, from, to) {
|
|
|
|
if (typeof arr[from] !== 'undefined') {
|
|
|
|
arr[to] = arr[from];
|
|
|
|
delete arr[from];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function map(arr, key, f) {
|
|
|
|
if (typeof arr[key] !== 'undefined') {
|
|
|
|
arr[key] = f(arr[key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function clean(arr, key) {
|
2021-02-06 06:26:05 -07:00
|
|
|
if (typeof arr[key] !== 'undefined' && (arr[key] === null || arr[key] === '')) {
|
2012-10-11 17:05:30 -06:00
|
|
|
delete arr[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function cleanArray(arr, key) {
|
|
|
|
if (typeof arr[key] !== 'undefined' && arr[key].length === 0) {
|
|
|
|
delete arr[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function cleanOrRename(arr, from, to) {
|
|
|
|
clean(arr, from);
|
|
|
|
rename(arr, from, to);
|
|
|
|
}
|
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
function removeSpace(str) {
|
|
|
|
return str.replace(/ /g, '');
|
|
|
|
}
|
2012-10-11 17:05:30 -06:00
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
function finishedOrAborted(game) {
|
|
|
|
return game.status >= 25;
|
|
|
|
}
|
2012-10-11 17:05:30 -06:00
|
|
|
|
2012-10-12 14:37:34 -06:00
|
|
|
var c, z, pgn;
|
2012-10-11 17:05:30 -06:00
|
|
|
var it = 0;
|
|
|
|
var dat = new Date().getTime() / 1000;
|
|
|
|
var finishedPlayerFieldsToRemove = ['previousMoveTs', 'lastDrawOffer', 'isOfferingDraw', 'isProposingTakeback'];
|
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
gamesToMigrate.forEach(function (g) {
|
2012-10-11 17:05:30 -06:00
|
|
|
cleanOrRename(g, 'castles', 'cs');
|
2021-02-06 06:26:05 -07:00
|
|
|
if (g.cc === 'white') {
|
2012-10-11 17:05:30 -06:00
|
|
|
delete g.cc;
|
|
|
|
} else {
|
|
|
|
g.cc = false;
|
|
|
|
}
|
|
|
|
cleanOrRename(g, 'check', 'ck');
|
|
|
|
cleanOrRename(g, 'lastMove', 'lm');
|
2012-10-12 15:03:39 -06:00
|
|
|
map(g, 'lm', removeSpace);
|
2012-10-11 17:05:30 -06:00
|
|
|
cleanOrRename(g, 'initialFen', 'if');
|
|
|
|
clean(g, 'clock');
|
|
|
|
cleanArray(g, 'userIds');
|
|
|
|
rename(g, 'userIds', 'uids');
|
|
|
|
rename(g, 'createdAt', 'ca');
|
|
|
|
rename(g, 'turns', 't');
|
|
|
|
rename(g, 'status', 's');
|
|
|
|
cleanOrRename(g, 'updatedAt', 'ua');
|
|
|
|
cleanOrRename(g, 'winId', 'wid');
|
|
|
|
delete g.r960;
|
|
|
|
if (typeof g.v !== 'undefined' && g.v != 2) {
|
|
|
|
delete g.v;
|
|
|
|
}
|
|
|
|
if (typeof g.isRated != 'undefined' && g.isRated !== true) {
|
|
|
|
delete g.isRated;
|
|
|
|
} else {
|
|
|
|
cleanOrRename(g, 'isRated', 'ra');
|
|
|
|
}
|
|
|
|
if (finishedOrAborted(g)) {
|
2012-10-13 07:37:19 -06:00
|
|
|
delete g.positionHashes;
|
2012-10-12 10:11:36 -06:00
|
|
|
delete g.lmt;
|
2012-10-11 17:05:30 -06:00
|
|
|
} else {
|
|
|
|
cleanOrRename(g, 'positionHashes', 'ph');
|
|
|
|
}
|
|
|
|
cleanOrRename(g, 'clock', 'c');
|
2021-02-06 06:26:05 -07:00
|
|
|
if ((c = g.c)) {
|
2012-10-11 17:05:30 -06:00
|
|
|
if (finishedOrAborted(g)) {
|
|
|
|
delete c.timer;
|
|
|
|
} else {
|
|
|
|
cleanOrRename(c, 'timer', 't');
|
|
|
|
}
|
|
|
|
if (typeof c.c !== 'undefined') {
|
|
|
|
c.c = c.c === 'white';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
rename(g, 'players', 'p');
|
2021-02-06 06:26:05 -07:00
|
|
|
g.p.forEach(function (p) {
|
2012-10-11 17:05:30 -06:00
|
|
|
delete p.c;
|
2012-10-12 15:03:39 -06:00
|
|
|
map(p, 'ps', removeSpace);
|
2012-10-11 17:05:30 -06:00
|
|
|
if (finishedOrAborted(g) && typeof p.blurs !== 'undefined' && p.blurs < 7) {
|
|
|
|
delete p.blurs;
|
|
|
|
} else {
|
|
|
|
cleanOrRename(p, 'blurs', 'bs');
|
|
|
|
}
|
|
|
|
if (finishedOrAborted(g)) {
|
|
|
|
for (z in finishedPlayerFieldsToRemove) {
|
|
|
|
delete p[z];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete p.isAi;
|
|
|
|
rename(p, 'aiLevel', 'ai');
|
|
|
|
});
|
2012-10-12 14:37:34 -06:00
|
|
|
pgn = g.pgn;
|
|
|
|
delete g.pgn;
|
2012-10-11 17:05:30 -06:00
|
|
|
collection.insert(g);
|
2021-02-06 06:26:05 -07:00
|
|
|
if (pgn !== null && pgn !== '') {
|
|
|
|
pgnCollection.insert({ _id: g._id, p: pgn });
|
2012-10-12 14:37:34 -06:00
|
|
|
}
|
2012-10-11 17:05:30 -06:00
|
|
|
++it;
|
|
|
|
if (it % batchSize == 0) {
|
|
|
|
var percent = Math.round((it / max) * 100);
|
|
|
|
var dat2 = new Date().getTime() / 1000;
|
|
|
|
var perSec = Math.round(batchSize / (dat2 - dat));
|
|
|
|
dat = dat2;
|
2021-02-06 06:26:05 -07:00
|
|
|
print(it / 1000 + 'k ' + percent + '% ' + perSec + '/s');
|
2012-10-11 17:05:30 -06:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
print('Building indexes');
|
|
|
|
collection.ensureIndex({ s: 1 });
|
|
|
|
collection.ensureIndex({ uids: 1 }, { sparse: 1 });
|
|
|
|
collection.ensureIndex({ wid: 1 }, { sparse: 1 });
|
|
|
|
collection.ensureIndex({ ca: -1 });
|
|
|
|
collection.ensureIndex({ uids: 1, ca: -1 });
|
|
|
|
collection.ensureIndex({ bm: 1 }, { sparse: 1 });
|
2012-10-11 17:05:30 -06:00
|
|
|
|
2021-02-06 06:26:05 -07:00
|
|
|
print('Done!');
|