codecombat/scripts/analytics/mongodb/queries/classroomCounts.js
2015-11-20 14:29:06 -08:00

44 lines
1.4 KiB
JavaScript

// Print out classrooms ordered by size
// Usage:
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
var userClassroomMap = {};
var cursor = db.classrooms.find({$where: 'this.members.length > 40'}, {ownerID: 1, name: 1, members: 1});
while (cursor.hasNext()) {
var doc = cursor.next();
var userID = doc.ownerID.valueOf();
if (!userClassroomMap[userID]) userClassroomMap[userID] = [];
userClassroomMap[userID].push({
classroomID: doc._id,
className: doc.name,
count: doc.members.length
});
}
var userIDs = [];
for (var userID in userClassroomMap) {
userIDs.push(new ObjectId(userID));
}
var classrooms = [];
cursor = db.users.find({_id: {$in: userIDs}}, {email: 1});
while (cursor.hasNext()) {
var doc = cursor.next();
var userID = doc._id.valueOf();
for (var i = 0; i < userClassroomMap[userID].length; i++) {
classrooms.push({
ownerID: userID,
email: doc.email,
classroomID: userClassroomMap[userID][i].classroomID,
className: userClassroomMap[userID][i].className,
count: userClassroomMap[userID][i].count
});
}
}
classrooms.sort(function(a, b) { return a.count > b.count ? -1 : 1;});
for (var i = 0; i < classrooms.length; i++) {
print(classrooms[i].count, classrooms[i].className, classrooms[i].email, classrooms[i].classroomID.valueOf());
}
print("Total classes:", classrooms.length);