136 lines
2.3 KiB
JavaScript
136 lines
2.3 KiB
JavaScript
var gamesToMigrate = db.analysis.find();
|
|
var max = gamesToMigrate.count();
|
|
var batchSize = 1000;
|
|
var collection = db.analysis2;
|
|
|
|
var piotr = {
|
|
a: 'A1',
|
|
b: 'B1',
|
|
c: 'C1',
|
|
d: 'D1',
|
|
e: 'E1',
|
|
f: 'F1',
|
|
g: 'G1',
|
|
h: 'H1',
|
|
i: 'A2',
|
|
j: 'B2',
|
|
k: 'C2',
|
|
l: 'D2',
|
|
m: 'E2',
|
|
n: 'F2',
|
|
o: 'G2',
|
|
p: 'H2',
|
|
q: 'A3',
|
|
r: 'B3',
|
|
s: 'C3',
|
|
t: 'D3',
|
|
u: 'E3',
|
|
v: 'F3',
|
|
w: 'G3',
|
|
x: 'H3',
|
|
y: 'A4',
|
|
z: 'B4',
|
|
A: 'C4',
|
|
B: 'D4',
|
|
C: 'E4',
|
|
D: 'F4',
|
|
E: 'G4',
|
|
F: 'H4',
|
|
G: 'A5',
|
|
H: 'B5',
|
|
I: 'C5',
|
|
J: 'D5',
|
|
K: 'E5',
|
|
L: 'F5',
|
|
M: 'G5',
|
|
N: 'H5',
|
|
O: 'A6',
|
|
P: 'B6',
|
|
Q: 'C6',
|
|
R: 'D6',
|
|
S: 'E6',
|
|
T: 'F6',
|
|
U: 'G6',
|
|
V: 'H6',
|
|
W: 'A7',
|
|
X: 'B7',
|
|
Y: 'C7',
|
|
Z: 'D7',
|
|
0: 'E7',
|
|
1: 'F7',
|
|
2: 'G7',
|
|
3: 'H7',
|
|
4: 'A8',
|
|
5: 'B8',
|
|
6: 'C8',
|
|
7: 'D8',
|
|
8: 'E8',
|
|
9: 'F8',
|
|
'!': 'G8',
|
|
'?': 'H8',
|
|
};
|
|
|
|
function decodePiotr(pp) {
|
|
return pp == '_' ? null : (piotr[pp[0]] + piotr[pp[1]]).toLowerCase();
|
|
}
|
|
|
|
function decodeScore(pp) {
|
|
return pp == '_' ? null : parseInt(pp);
|
|
}
|
|
|
|
print('Migrating ' + max + ' analysis');
|
|
|
|
collection.drop();
|
|
|
|
var nb = 0,
|
|
dat = new Date().getTime() / 1000;
|
|
gamesToMigrate.forEach(function (a) {
|
|
var encoded = a.encoded;
|
|
if (!encoded) return;
|
|
if (typeof encoded == 'undefined') return;
|
|
try {
|
|
var splitted = encoded.split(' ');
|
|
var data = [];
|
|
for (it = 0, l = splitted.length - 1; it < l; it++) {
|
|
var cur = splitted[it].split(',');
|
|
var next = splitted[it + 1].split(',');
|
|
var move = decodePiotr(cur[0]),
|
|
best = decodePiotr(cur[1]),
|
|
score = decodeScore(next[2]),
|
|
mate = decodeScore(next[3]);
|
|
data.push([score, mate == null ? null : it % 2 == 1 ? mate : -mate].join(','));
|
|
}
|
|
a.data = data.join(';');
|
|
delete a.encoded;
|
|
a.old = true;
|
|
// print(encoded);
|
|
// print('--');
|
|
// printjson(a);
|
|
collection.insert(a);
|
|
} catch (e) {
|
|
printjson(a);
|
|
print(e);
|
|
}
|
|
++nb;
|
|
if (nb % batchSize == 0) {
|
|
var percent = Math.round((nb / max) * 100);
|
|
var dat2 = new Date().getTime() / 1000;
|
|
var perSec = Math.round(batchSize / (dat2 - dat));
|
|
dat = dat2;
|
|
print(nb / 1000 + 'k ' + percent + '% ' + perSec + '/s');
|
|
}
|
|
});
|
|
|
|
print('Building indexes');
|
|
collection.ensureIndex({
|
|
done: 1,
|
|
});
|
|
collection.ensureIndex({
|
|
date: -1,
|
|
});
|
|
collection.ensureIndex({
|
|
uid: 1,
|
|
});
|
|
|
|
print('Done!');
|