diff --git a/database_reports/count_users_who_own_specified_gear.js b/database_reports/count_users_who_own_specified_gear.js index 7da478bfe8..c5fe8709b9 100644 --- a/database_reports/count_users_who_own_specified_gear.js +++ b/database_reports/count_users_who_own_specified_gear.js @@ -1,77 +1,201 @@ -var itemsOfInterest = [ - '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' -]; +var authorName = 'Alys'; // in case script author needs to know when their ... +var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done -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) +/** + * database_reports/count_users_who_own_specified_gear.js + * https://github.com/HabitRPG/habitrpg/pull/3884 + */ -db.users.find().forEach(function(user) { - var owned = user.items.gear.owned; - for (var i=0, ic=itemsOfInterest.length; i400k)\n'); + // NB: "should be" assumes that no query filter was applied to findEach + + return exiting(0); +} + + +function path(obj, path, def) { +/** + * Retrieve nested item from object/array + * @param {Object|Array} obj + * @param {String} path dot separated + * @param {*} def default value ( if result undefined ) + * @returns {*} + * http://stackoverflow.com/a/16190716 + * Usage: console.log(path(someObject, pathname)); + */ + for(var i = 0,path = path.split('.'),len = path.length; i < len; i++){ + if(!obj || typeof obj !== 'object') return def; + obj = obj[path[i]]; + } + if(obj === 'undefined') return def; + return obj; +} + + function yyyymmdd(date) { var yyyy = date.getFullYear().toString(); var mm = (date.getMonth()+1).toString(); var dd = date.getDate().toString(); return yyyy + "-" + (mm[1]?mm:"0"+mm[0]) + "-" + (dd[1]?dd:"0"+dd[0]); } -var today = yyyymmdd(new Date()); -var header = '"date"'; // heading row in CSV data -var data = '"' + today + '"'; // data row in CSV data -for (var i=0, ic=itemsOfInterest.length; i load("count_users_who_own_specified_gear.js") +Finding data... +Alys processed +lefnire processed +All users found. CSV DATA: -"date","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" -"2014-08-17","5","4","3","3","3","3","3" +"Unconventional Armor ownership" +"date","back_special_wondercon_black","back_special_wondercon_red","body_special_wondercon_black","body_special_wondercon_gold","body_special_wondercon_red","headAccessory_special_wondercon_black","headAccessory_special_wondercon_red" +"2014-09-01","7","7","7","7","7","7","9" + +"Spooky Skins purchases" +"date","ghost","monster","pumpkin","shadow","skeleton","zombie" +"2014-09-01","2","3","3","6","4","3" + READABLE DATA: -2014-08-17 -{ - "headAccessory_special_wondercon_red": 5, - "headAccessory_special_wondercon_black": 4, - "back_special_wondercon_black": 3, - "back_special_wondercon_red": 3, - "body_special_wondercon_red": 3, - "body_special_wondercon_black": 3, - "body_special_wondercon_gold": 3 -} +2014-09-01 + +Unconventional Armor ownership: + back_special_wondercon_black: 7 + back_special_wondercon_red: 7 + body_special_wondercon_black: 7 + body_special_wondercon_gold: 7 + body_special_wondercon_red: 7 + headAccessory_special_wondercon_black: 7 + headAccessory_special_wondercon_red: 9 + +Spooky Skins purchases: + ghost: 2 + monster: 3 + pumpkin: 3 + shadow: 6 + skeleton: 4 + zombie: 3 -true -> + +400100 users searched (should be >400k) + */