Skip to content

Instantly share code, notes, and snippets.

@focusj
Last active January 1, 2016 06:49
Show Gist options
  • Save focusj/8107820 to your computer and use it in GitHub Desktop.
Save focusj/8107820 to your computer and use it in GitHub Desktop.
var node = db.getSiblingDB("db1");
var rs = db.getSiblingDB("db2");
function prepareMsgIds(table) {
var iter = table.find({"_id":{"$regex":"^sq:"}});
return iter;
}
//FIXME: performace
function districtArray(array) {
var result = new Array();
//FIXME: performace
function indexOf(arr, item) {
var t = false;
for(var k = 0; k < arr.length; k++) {
if(arr[k]._id === item._id) t = true
}
return t;
}
for(var i = 0; i < array.length; i++){
if(!indexOf(result, array[i])) result.push(array[i]);
}
return result;
}
function jsonFormattor(prepares) {
function idExtractor(id) {
var uid = id.replace("sq:", "");
return uid;
}
function tsExtractor(msgId) {
var head = msgId.indexOf("~");
var tail = msgId.lastIndexOf("~")
var timestamp = msgId.slice(head+1, tail);
return Number(timestamp);
}
function toJson(uid, msgId, timestamp) {
return {
"_id": uid + ">" + "qm" + ">" + msgId,
"e": msgId + "<" + "qm",
"t": timestamp
};
}
var tmpRs = [];
for(var i = 0; prepares.hasNext(); i++) {
var item = prepares.next();
var idQ = item.s.q
for(var k = 0; k < idQ.length; k++) {
tmpRs.push(toJson(idExtractor(item._id), idQ[k], tsExtractor(idQ[k])));
}
}
return tmpRs;
}
//batch insert unread msgs ids
function batchInsertTo(table, dataArr, batchSize) {
var errors = [];
for(var n = 0; n < dataArr.length / batchSize; n++) {
var batch = dataArr.slice(n * batchSize, (n + 1) * batchSize);
table.insert(batch);
var lastErr = table.runCommand({"getLastError": 1, "w": 1 });
if(lastErr.err != null) errors[n] = lastErr;
}
return errors;
}
(function() {
var errors = batchInsertTo(rs.RS, districtArray(jsonFormattor(prepareMsgIds(node.Node))), 100);
printjson(errors);
})()
//now the unread msg id queue
/*{
"_id" : "sq:f:100000235239372",
"s" : {
"c" : 2,
"q" : [
"ms:f:100002966342971~1384949610662~71",
"ms:f:100002966342971~1384949611774~9"
]
}
}*/
//will transforms to
/*{
"_id" : "q:11111111>qm>ms:q:ojstuv~1387522125766~9210",
"e" : "ms:q:22222222222~1387522125766~9210<qm",
"t" : NumberLong(1387522131223)
}*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment