Skip to content

Instantly share code, notes, and snippets.

@jomaora
Created May 29, 2019 13:58
Show Gist options
  • Save jomaora/2259284d3dc640131084dd0140859438 to your computer and use it in GitHub Desktop.
Save jomaora/2259284d3dc640131084dd0140859438 to your computer and use it in GitHub Desktop.
'use strict'
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27020';
const findCourse = async (db, courseName) => {
const course = await db.collection('courses').findOne({name: courseName});
if (!course) {
throw new Error('Course not found');
}
return course;
}
const getNote = (db, code, student) => {
return db.collection('notes').findOne({
code,
student
});
}
const getStudentList = (db, program, program_year, year) => {
const pipeline = [
{$unwind: '$programs'},
{$unwind: '$programs.inscription'},
{$match: {
'programs.inscription.year': parseInt(year),
'programs.code': program,
'programs.inscription.program_year': program_year
}
},
{$sort: {name: 1}}
];
return db.collection('students').aggregate(pipeline).toArray();
}
const main = async () => {
const year = process.argv[3];
const courseName = process.argv[2];
console.log('Looking for', courseName, 'on', year);
let client;
try {
client = await MongoClient.connect(url);
console.log("Connecté");
const db = client.db('lpdw-university');
const course = await findCourse(db, courseName);
const students = await getStudentList(db, course.program, course.year, year);
const promises = students.map(s => getNote(db, course.code, s.code));
const notes = await Promise.all(promises);
students.map((s, index) => {
console.log(s.code, s.name, '\t', notes[index].score);
})
await client.close();
}
catch(err) {
console.log(err);
process.exit(1);
}
};
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment