Skip to content

Instantly share code, notes, and snippets.

@gatesvp
Created November 16, 2010 14:41
Show Gist options
  • Select an option

  • Save gatesvp/701883 to your computer and use it in GitHub Desktop.

Select an option

Save gatesvp/701883 to your computer and use it in GitHub Desktop.
use cookie;
/**
* Cookie to lookups process
*/
create_new_lookup = function(x) {
var ins = new Array;
var outs = new Array;
for(var i in x.maps) {
ins.push(i);
outs.push({
"sid" : x.maps[i].sid,
"aid" : x.maps[i].aid,
"uid" : x.maps[i].uid,
"pid" : x.maps[i].pid
});
}
var new_obj = {
'_id' : new ObjectId(),
'in' : ins,
'out' : outs
};
db.lookup.insert(new_obj);
return new_obj;
}
merge_lookups = function(current_lookup, found){
var found_iid = found._id;
db.lookup.update( { _id : current_lookup._id }, { $addToSet : { in : { $each : found.in }, out : { $each : found.out } } } );
db.lookup.remove( { _id : found._id } );
db.raw.update( { iid : found_iid, $atomic: true }, { $set : { iid : current_lookup._id } }, true, true);
}
process_single_cookie = function(current_cookie) {
var current_lookup = null;
var created = false;
if (current_cookie.iid == null) {
current_lookup = create_new_lookup(current_cookie);
current_cookie.iid = current_lookup._id;
db.raw.save(current_cookie);
created = true;
}
else {
current_lookup = db.lookup.findOne( { _id : current_cookie.iid } );
if(current_lookup == null){ print(tojson(current_cookie)); return false; }
}
for (var m in current_cookie.maps) {
var found = db.lookup.findOne( { 'in' : m } );
if (found != null && found._id.equals(current_cookie.iid)) {
// done
}
else if (found != null && !found._id.equals(current_cookie.iid) ) {
merge_lookups(current_lookup, found);
}
else if (found == null && !created) {
// add to set
var new_out = {"sid" : current_cookie.maps[m].sid, "aid" : current_cookie.maps[m].aid, "uid" : current_cookie.maps[m].uid, "pid" : current_cookie.maps[m].pid};
db.lookup.update( { _id : current_cookie.iid }, { $addToSet : { "in" : m, "out" : new_out } } );
}
}
}
db.lookup.remove();
db.raw.update({ "iid" : {$exists:true} }, { $unset : { "iid" : 1 } }, false, true );
db.raw.find().forEach(function(x) { process_single_cookie(x); } );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment