Skip to content

Instantly share code, notes, and snippets.

@barisusakli
Created October 30, 2014 23:40
Show Gist options
  • Save barisusakli/3d3fb9d86fce422f2c6a to your computer and use it in GitHub Desktop.
Save barisusakli/3d3fb9d86fce422f2c6a to your computer and use it in GitHub Desktop.
process all upvotes to a json file
var nconf = require('nconf');
var async = require('async');
var fs = require('fs');
nconf.file({
file: 'config.json'
});
var db = require('./src/database'),
batch = require('./src/batch');
var data = [];
var count = 0;
db.init(function(err) {
if (err) {
console.log("NodeBB could not connect to your Mongo database. Mongo returned the following error: " + err.message);
process.exit();
}
batch.processSortedSet('users:joindate', function(uids, next) {
async.each(uids, processUid, function(err) {
if (err) {
return next(err);
}
count += uids.length;
console.log('finished ' + count);
next();
});
}, function(err) {
if (err) {
console.log(err);
process.exit();
return;
}
fs.writeFile('upvote_data.json', JSON.stringify(data, null, 0), function(err) {
if (err) {
console.log(err);
process.exit();
return;
}
console.log('done, total pids : ', data.length);
});
});
});
function processUid(uid, next) {
db.sortedSetCard('uid:' + uid + ':upvote', function(err, count) {
if (err) {
return next(err);
}
if (!count) {
return next();
}
batch.processSortedSet('uid:' + uid + ':upvote', function(pids, next) {
async.each(pids, function(pid, next) {
processUpvote(uid, pid, next);
}, next);
}, next);
});
}
function processUpvote(uid, pid, next) {
async.parallel({
email_upvoted: function(next) {
db.getObjectField('post:' + pid, 'uid', function(err, uid) {
if (err) {
return next(err);
}
db.getObjectField('user:' + uid, 'email', next);
});
},
upvote_time: function(next) {
db.sortedSetScore('uid:' + uid + ':upvote', pid, next);
}
}, function(err, results) {
if (err) {
return next(err);
}
data.push({
pid: pid,
uid: uid,
email: results.email_upvoted,
t: results.upvote_time
});
next();
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment