Le funzioni di aggregazione (aggregate)
19. Visualizzare il numero di corsisti di sesso maschile e di sesso femminile($group)
db.esiti.aggregate([{$group:{_id:”$sesso”, totale:{$sum:1}}}])
20. Visualizzare il corsista più anziano per genere ($group)
db.esiti.aggregate([{$group:{_id:”$sesso”, Età : {$max:”$eta”}}}])
21. Visualizziamo l’età media ($group-$avg)
db.esiti.aggregate([{$group:{_id:null,etamedia:{$avg: “$eta”}}}])
22. Visualizzare l’età media suddivisa per sesso ($group-$avg)
db.esiti.aggregate([{$group:{_id:”$sesso” ,etamedia:{$avg: “$eta”}}}])
23. Ordinamento crescente e decrescente dei corsisti per cognome e nome ($sort)
- Crescente
db.esiti.aggregate([{ $sort : { cognome : 1, nome : 1}} ])
o più elegantemente
db.esiti.aggregate([{ $sort : { cognome : 1, nome : 1}} ]).pretty()
- Decrescente
db.esiti.aggregate([{ $sort : { cognome : -1, nome : -1}} ])
o più elegantemente
db.esiti.aggregate([{ $sort : { cognome : -1, nome : -1}} ]).pretty()
24. Visualizzare l’età media delle corsiste ($match-$group-$avg)
db.esiti.aggregate([{$match:{sesso:”F”}},{$group:{_id:null,etamedia:{$avg: “$eta”}}}])
25. Visualizzare l’età media dei corsisti che hanno sostenuto la prova di “pittura ad olio” ($match-$group-$avg)
db.esiti.aggregate([{$match:{“prove.tipo”:”pittura ad olio”}},{$group:{_id: null,media:{$avg: “$eta”}}}])
26. Visualizzare il voto medio, il massimo, il minimo e la somma riportato da ogni corsista
(a: $unwind-$group-$avg)
(b: $unwind-$group-$sum)
(c: $unwind-$group-$max)
(d: $unwind-$group-$min)
(e: $unwind-$group-$max-$min)
Viene utilizzato l’operatore $unwind per decostruire un elemento da un array in un documento e creare documenti di output separati per ogni elemento dell’array, mentre l’operatore $group raggruppa i documenti per _id.
a. db.esiti.aggregate([{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Media dei voti”: {“$avg”:”$prove.voto”}}}])
b. db.esiti.aggregate([{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Somma dei voti”: {“$sum”:”$prove.voto”}}}])
c. db.esiti.aggregate([{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Voto massimo”: {“$max”:”$prove.voto”}}}])
d. db.esiti.aggregate([{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Voto minimo”: {“$min”:”$prove.voto”}}}])
e anche in combinazione
e. db.esiti.aggregate([{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Voto massimo”: {“$max”:”$prove.voto”},”Voto minimo”: {“$min”:”$prove.voto”}}}])
27. Visualizzare le prove sostenute dai corsisti con l’indicazione del cognome, del nome e del tipo di prova con il relativo voto ($unwind-$project)
db.esiti.aggregate([{$unwind:”$prove”},{$project: {_id:0,cognome:1,nome:1,”prove.tipo”:1,”prove.voto”:1}}])
28. Visualizzare il voto medio riportato dal corsista n.1 o dal corsista Simone Prati ($match-$unwind-$group-$avg)
L’operatore $match rappresenta la condizione sulla quale effettuare il raggruppamento dopo aver decostruito l’array prove con l’operatore $unwind
a. db.esiti.aggregate([{$match:{_id:1}},{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Media dei voti”: {“$avg”:”$prove.voto”}}}])
b. db.esiti.aggregate([{$match:{nome: “simone”,cognome: “prati”}}, {“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Media dei voti”: {“$avg”:”$prove.voto”}}}])
29. Visualizzare il voto medio suddiviso per le prove ($unwind-$group-$avg)
db.esiti.aggregate([{$unwind:”$prove”},{$group:{_id: “$prove.tipo”,media:{$avg: “$prove.voto”}}}])
30. Visualizzare il voto medio suddiviso per le prove in ordine crescente sul voto medio ($unwind-$group-$avg-$sort)
db.esiti.aggregate([{$unwind:”$prove”},{$group:{_id: “$prove.tipo”,media:{$avg: “$prove.voto”}}},{$sort:{media:1}}])
31. Visualizzare il voto medio suddiviso per le prove in ordine decrescente sul tipo di prova ($unwind-$group-$avg-$sort)
db.esiti.aggregate([{$unwind:”$prove”},{$group:{_id: “$prove.tipo”,media:{$avg: “$prove.voto”}}},
{$sort:{_id:-1}}])
32. Visualizzare il voto medio delle corsiste ($match-$unwind-$group-$avg)
db.esiti.aggregate([{$match:{sesso:”F”}},{“$unwind”:”$prove”},{“$group”:{“_id”:”$_id”,”Media dei voti”: {“$avg”:”$prove.voto”}}}])
33. Visualizzare i documenti dei corsisti che hanno ottenuto una votazione maggiore o uguale a 8 almeno in una prova ($match-$elemMatch-$gte)
db.esiti.aggregate([{$match:{prove:{$elemMatch:{voto:{$gte:8}}}}}])
34. Volendo sapere quanti ne sono con riferimento alla n. 33 ($match-$elemMatch-$gte-$count)
db.esiti.aggregate([{$match:{prove:{$elemMatch:{voto:{$gte:8}}}}},{$count:”Numero Corsisti”}])