From c4aaeaf887bf8e96205a31559b4e4d20ea1e7050 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Fri, 25 Dec 2015 15:17:15 -0600 Subject: [PATCH 1/3] write data export script --- seed/get-challenge-completion.js | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 seed/get-challenge-completion.js diff --git a/seed/get-challenge-completion.js b/seed/get-challenge-completion.js new file mode 100644 index 0000000000..f66856f72d --- /dev/null +++ b/seed/get-challenge-completion.js @@ -0,0 +1,34 @@ +/* eslint-disable no-process-exit */ +require('dotenv').load(); +var secrets = require('../config/secrets'), + mongodb = require('mongodb'), + MongoClient = mongodb.MongoClient, + _ = require('lodash'); + +MongoClient.connect(secrets.db, function(err, database) { + if (err) { + throw err; + } + + database.collection('user').aggregate([ + {$match: { 'completedChallenges': { $exists: true } } }, + {$match: { 'completedChallenges': { $ne: '' } } }, + {$match: { 'completedChallenges': { $ne: null } } }, + {$group: { '_id': 1, 'completedChallenges': {$addToSet: '$completedChallenges' } } } + ], function(err, results) { + if (err) { throw err; } + var testout = results.map(function(camper) { + return _.flatten(camper.completedChallenges.map(function(challenges) { + return challenges.map(function(challenge) { + return { + name: challenge.name, + completedDate: challenge.completedDate, + solution: challenge.solution + }; + }); + }), true); + }); + console.log(JSON.stringify(testout)); + process.exit(0); + }); +}); \ No newline at end of file From 912d515148c7c06bc3231ac9e32ee523b5c8dfa2 Mon Sep 17 00:00:00 2001 From: terakilobyte Date: Fri, 25 Dec 2015 21:31:13 -0800 Subject: [PATCH 2/3] Data creation script --- seed/get-challenge-completion.js | 55 +++++++++++++++++++------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/seed/get-challenge-completion.js b/seed/get-challenge-completion.js index f66856f72d..364451b012 100644 --- a/seed/get-challenge-completion.js +++ b/seed/get-challenge-completion.js @@ -1,34 +1,45 @@ /* eslint-disable no-process-exit */ + +/** + * Data creation script for academic data pushes. Run this script with + * node seed/get-challenge-completion.js >> ~/output.json + * For large data sets supply the flag --max_old_space_size=2000000 to node. + * Run from the root FCC directory. Beware, this will generate a very large file + * if you have a large user collection such as the production mongo db. +*/ + require('dotenv').load(); var secrets = require('../config/secrets'), mongodb = require('mongodb'), - MongoClient = mongodb.MongoClient, - _ = require('lodash'); + MongoClient = mongodb.MongoClient; MongoClient.connect(secrets.db, function(err, database) { if (err) { throw err; } - - database.collection('user').aggregate([ - {$match: { 'completedChallenges': { $exists: true } } }, - {$match: { 'completedChallenges': { $ne: '' } } }, - {$match: { 'completedChallenges': { $ne: null } } }, - {$group: { '_id': 1, 'completedChallenges': {$addToSet: '$completedChallenges' } } } - ], function(err, results) { - if (err) { throw err; } - var testout = results.map(function(camper) { - return _.flatten(camper.completedChallenges.map(function(challenges) { - return challenges.map(function(challenge) { - return { - name: challenge.name, - completedDate: challenge.completedDate, - solution: challenge.solution - }; + var stream = database.collection('user') + .find({'completedChallenges': { $ne: null }}, + {'completedChallenges': true}) + .stream(); + console.log('['); + stream.on('data', function(results) { + if (!results.completedChallenges) { + // dud + } else { + var testout = []; + results.completedChallenges.forEach(function(challenge) { + testout.push({ + name: challenge.name, + completedDate: challenge.completedDate, + solution: challenge.solution }); - }), true); - }); - console.log(JSON.stringify(testout)); + }); + if (testout.length) { + console.log(JSON.stringify(testout) + ','); + } + } + }).on('end', function() { + console.log(']'); process.exit(0); }); -}); \ No newline at end of file +}); From eb5ff7f0c7104f7322d449e24b34f907a277af32 Mon Sep 17 00:00:00 2001 From: terakilobyte Date: Sat, 26 Dec 2015 09:55:16 -0800 Subject: [PATCH 3/3] Do not collect camper data of private campers --- seed/get-challenge-completion.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/seed/get-challenge-completion.js b/seed/get-challenge-completion.js index 364451b012..06688b1e2c 100644 --- a/seed/get-challenge-completion.js +++ b/seed/get-challenge-completion.js @@ -18,7 +18,8 @@ MongoClient.connect(secrets.db, function(err, database) { throw err; } var stream = database.collection('user') - .find({'completedChallenges': { $ne: null }}, + .find({'completedChallenges': { $ne: null }, + 'isLocked': { $ne: true } }, {'completedChallenges': true}) .stream(); console.log('['); @@ -26,16 +27,16 @@ MongoClient.connect(secrets.db, function(err, database) { if (!results.completedChallenges) { // dud } else { - var testout = []; + var dataOut = []; results.completedChallenges.forEach(function(challenge) { - testout.push({ + dataOut.push({ name: challenge.name, completedDate: challenge.completedDate, solution: challenge.solution }); }); - if (testout.length) { - console.log(JSON.stringify(testout) + ','); + if (dataOut.length) { + console.log(JSON.stringify(dataOut) + ','); } } }).on('end', function() {