From 34e2f2336195d43fa3f93d5012eebdff9bbc8dd9 Mon Sep 17 00:00:00 2001 From: Alice Harris Date: Mon, 1 Sep 2014 07:47:59 +1000 Subject: [PATCH] modify report to use better code --- .../count_users_who_own_specified_gear.js | 144 ++++++++++++++---- 1 file changed, 118 insertions(+), 26 deletions(-) diff --git a/database_reports/count_users_who_own_specified_gear.js b/database_reports/count_users_who_own_specified_gear.js index 7da478bfe8..2e66b12bb3 100644 --- a/database_reports/count_users_who_own_specified_gear.js +++ b/database_reports/count_users_who_own_specified_gear.js @@ -1,4 +1,42 @@ -var itemsOfInterest = [ +var migrationName = '20140829_change_headAccessory_to_eyewear'; +var authorName = 'Alys'; // in case script author needs to know when their ... +var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done + +/** + * count_users_who_own_specified_gear.js + * https://github.com/HabitRPG/habitrpg/pull/3884 + */ + +var mongo = require('mongoskin'); +var _ = require('lodash'); + +/////////////////// UNCOMMENT *ONE* OF THESE LINES: /////////////////// +// var dbUsers = mongo.db('lefnire:mAdn3s5s@charlotte.mongohq.com:10015/habitrpg_large?auto_reconnect').collection('users'); // @lefnire production? +// var dbUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users'); // @lefnire habitrpg_old +var dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users'); // for local testing by script author (e.g., vagrant install) +if (typeof dbUsers == 'undefined') { exiting(1, 'Uncomment one of the "var dbUsers" lines!'); } + +var thingsOfInterest = { + 'items.gear.owned': [ + 'headAccessory_special_wondercon_red', + 'headAccessory_special_wondercon_black', + 'back_special_wondercon_black', + 'back_special_wondercon_red', + 'body_special_wondercon_red', + 'body_special_wondercon_black', + 'body_special_wondercon_gold' + ], + 'purchased.skin': [ + 'monster', + 'pumpkin', + 'skeleton', + 'zombie', + 'ghost', + 'shadow' + ] +}; + +var thingsOfInterest = [ // TST 'headAccessory_special_wondercon_red', 'headAccessory_special_wondercon_black', 'back_special_wondercon_black', @@ -8,47 +46,100 @@ var itemsOfInterest = [ 'body_special_wondercon_gold' ]; -var itemsFound = {}; // each key is one item from itemsOfInterest, and - // the value for that key is the number of users who own it - // ('owned' values of both true and false are counted to - // include items lost on death) +var query = {}; // Not worth limiting search data with query and fields since +var fields = {}; // this will be run over a local copy of the database? + +var thingsFound = {}; // each key is one "thing" from thingsOfInterest, + // and the value for that key is the number of users who own it + // (for items, 'owned' values of both true and false are counted + // to include items lost on death) + +console.warn('Finding data...'); +var progressCount = 1000; +var count = 0; +// db.users.find().forEach(function(user) { ... }); +dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { + if (err) { return exiting(1, 'ERROR! ' + err); } + if (!user) { + console.warn('All users found.'); + return displayData(); + } + count++; + + +/* + _.each(['costume','equipped'],function(type){ + unset['items.gear.'+type+'.headAccessory'] = ""; + set['items.gear.'+type+'.eyewear'] = newName; + }); + _.each(oldToNew,function(newName,oldName){ + unset['items.gear.owned.'+oldName] = ""; + }); +*/ -db.users.find().forEach(function(user) { var owned = user.items.gear.owned; - for (var i=0, ic=itemsOfInterest.length; i load("count_users_who_own_specified_gear.js") @@ -75,3 +166,4 @@ READABLE DATA: true > */ +