Objectifs du projet
- Travailler dans un projet open-source existant
- Apprendre à utiliser MongoDB
- Améliorer la partie statistique de l'administration de cours
INGInious
- Application web
- Développée au département
- Execute de manière sûre du code dangereux venant des étudiants
Architecture d'INGInious
Frontend
- Classes gérant l'affiche des classes
- Templates webpy/html
- Scripts et classes gérant la session de l'utilisateur
Page existante 1/3
Page existante 2/3
Page existante 3/3
Ce que vous allez faire:
- Identifiez des statistiques ou points intéressants à être investigués
- Ecrire des queries avec pymongo
- Améliorer l'UI
Données 1/3
- Dans MongoDB, les données sont des JSON
- Même structure que les dictionnaires en python
Données 2/3
from pymongo import MongoClient
cars = [ {'name': 'Audi', 'price': 52642},
{'name': 'Mercedes', 'price': 57127},
{'name': 'Skoda', 'price': 9000},
{'name': 'Volvo', 'price': 29000},
{'name': 'Bentley', 'price': 350000},
{'name': 'Citroen', 'price': 21000},
{'name': 'Hummer', 'price': 41400},
{'name': 'Volkswagen', 'price': 21600} ]
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
db.cars.insert_many(cars)
Données 3/3
> db.cars.find()
{ "_id" : ObjectId("5b41eb21b9c5d915989d48a8"), "price" : 52642, "name" : "Audi" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48a9"), "price" : 57127, "name" : "Mercedes" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48aa"), "price" : 9000, "name" : "Skoda" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ab"), "price" : 29000, "name" : "Volvo" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ac"), "price" : 350000, "name" : "Bentley" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ad"), "price" : 21000, "name" : "Citroen" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ae"), "price" : 41400, "name" : "Hummer" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48af"), "price" : 21600, "name" : "Volkswagen" }
Aggrégation
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
agr = [{ '$match': {'$or': [ { 'name': "Audi" }, { 'name': "Volvo" }] }},
{ '$group': {'_id': 1, 'sum2cars': { '$sum': "$price" } }}]
val = list(db.cars.aggregate(agr))
print('The sum of prices of two cars is {}'.format(val[0]['sum2cars']))