// 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);