mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 17:02:18 -05:00
Merge branch 'master' of https://github.com/codecombat/codecombat
This commit is contained in:
commit
eec818aa40
1 changed files with 65 additions and 0 deletions
65
scripts/mongodb/queries/coursesV1Beta.js
Normal file
65
scripts/mongodb/queries/coursesV1Beta.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
// Grab course instance data for Courses v1 Beta
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
// TODO: order by average levels completed
|
||||
|
||||
function objectIdWithTimestamp(timestamp)
|
||||
{
|
||||
// Convert string date to Date object (otherwise assume timestamp is a date)
|
||||
if (typeof(timestamp) == 'string') timestamp = new Date(timestamp);
|
||||
// Convert date object to hex seconds since Unix epoch
|
||||
var hexSeconds = Math.floor(timestamp/1000).toString(16);
|
||||
// Create an ObjectId with that hex timestamp
|
||||
var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
|
||||
return constructedObjectId
|
||||
}
|
||||
|
||||
var betaStartDate = new ISODate('2015-10-08');
|
||||
var minMembers = 9;
|
||||
|
||||
var classes = [];
|
||||
var ownerIDs = [];
|
||||
var cursor = db['course.instances'].find({$and: [
|
||||
{_id: {$gte: objectIdWithTimestamp(betaStartDate)}},
|
||||
{$where: 'this.members.length > ' + minMembers}
|
||||
]}).sort({_id: 1});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
var ownerID = doc.ownerID;
|
||||
ownerIDs.push(ownerID);
|
||||
if (!classes[ownerID.valueOf()]) classes[ownerID.valueOf()] = [];
|
||||
classes.push({
|
||||
courseID: doc.courseID,
|
||||
courseInstanceID: doc._id,
|
||||
url: 'codecombat.com/courses/' + doc.courseID.valueOf() + '/' + doc._id.valueOf(),
|
||||
ownerID: doc.ownerID,
|
||||
createDate: ownerID.getTimestamp(),
|
||||
memberCount: doc.members.length,
|
||||
name: doc.name
|
||||
});
|
||||
}
|
||||
|
||||
var userMap = {};
|
||||
cursor = db.users.find({_id: {$in: ownerIDs}});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
if (!userMap[doc._id.valueOf()]) userMap[doc._id.valueOf()] = {};
|
||||
userMap[doc._id.valueOf()].emailLower = doc.emailLower;
|
||||
userMap[doc._id.valueOf()].name = doc.name;
|
||||
}
|
||||
|
||||
for (var i = 0; i < classes.length; i++) {
|
||||
classes[i].email = userMap[classes[i].ownerID.valueOf()].emailLower;
|
||||
}
|
||||
|
||||
classes.sort(function(a, b) {
|
||||
return b.memberCount - a.memberCount;
|
||||
});
|
||||
|
||||
for (var i = 0; i < classes.length; i++) {
|
||||
print(classes[i].url + '\t' + classes[i].memberCount + '\t' + classes[i].email + '\t' + classes[i].name);
|
||||
}
|
||||
|
||||
print(classes.length + ' course instances with over ' + minMembers + ' members');
|
Loading…
Reference in a new issue