ESERCIZIO BONUS 2 (+0.4) –
Implementazione basi di dati con MongoDB
5/11/2020, Consegna: 15/11/2020, ore 23.55
Modalità di consegna à Attraverso la piattaforma di e-learning VIRTUALE (https://virtuale.unibo.it) di UNIBO. Passi da svolgere:
1) Collegarsi a: https://virtuale.unibo.it, utilizzando le proprie credenziali istituzionali UNIBO (email/password) per l’accesso.
2) Scegliere il corso di Basi di dati della Laurea in Informatica per il Management, anno accademico 2020/2021 (codice: 70155).
3) Cliccare su Esercizio Bonus 2àConsegna File, e procedere con l’upload del file contenente la soluzione dell’esercizio. E’ possibile ripetere l’operazione di upload.
4) Quando si vuole consegnare l’elaborato DEFINITIVO, cliccare su “Consegna Compito”.
Da questo momento, nessun ulteriore upload è possibile. Se non si clicca su “Consegna Compito”, il docente NON vede l’elaborato.
5) La sottomissione è possibile dal 5/11/2020 al 15/11/2020, ore 23.55.
COSA CONSEGNARE?
• Allegare un singolo file consegna2.js, contenente tutto il codice MongoDB/Javascript che implementa le specifiche dell’esercizio descritto a seguire.
---
PASSO PRELIMINARE (esercizio 0). In MongoDB, creare il database farmacieBO e la collezione farmacie. Importare i documenti presenti nel file farmacie.json (file presente sulla pagina Web del corso) all’interno del database farmacieBO e -nello specifico- all’interno della collezione farmacie. L’importazione può essere effettuata in due modi: tramite interfaccia di Robo3T, oppure da terminale. Nel caso di importazione da terminale, il comando per importare i documenti è mongoimport, con questa sintassi:
mongoimport --db farmacieBO –-collection farmacie --file farmacie.json – jsonArray
oppure:
mongoimport --db farmacieBO –collection farmacie --file farmacie_3T.json
Il comando mongoimport deve essere eseguito da shell, e NON deve figurare all’interno dello script consegna2.js.
Nel caso di importazione da interfaccia Robo3T, usare il file farmacie_3T.json (file presente sulla pagina Web del corso); dall’interfaccia, cliccare sul database à collezione farmacie à Insert Document, quindi fare copia e incolla del contenuto del file nell’apposita maschera di inserimento.
Ogni documento del file farmacie.json dispone della seguente struttura:
{ nome: ****, indirizzo: ****, civico:****, letterale:****, telefono:
*****, orario apertura: **** cap: **** , regione: ****, stato: ****, città: ****, note: **** , lat: **** , long: ****, estensione: ****, tipologia: **** }
Implementare le seguenti funzionalità all’interno del file consegna2.js:
1) Contare il numero di documenti presenti nella collezione farmacie. Stampare a video il seguente messaggio:
[PUNTO 1] Numero di farmacie presenti: #NUM
dove #NUM è il risultato dell’operazione di conteggio.
2) Contare il numero di farmacie presenti in via S. Vitale (campo Indirizzo). Stampare a video il seguente messaggio:
[PUNTO 2] Numero di farmacie in via S. Vitale: #NUM
dove #NUM è il risultato dell’operazione di conteggio.
3) Contare il numero di farmacie con campo Tipologia pari “Comunale” oppure quelle con superficie maggiore a 60mq (campo Estensione):
[PUNTO 3] Numero di farmacie Comunali/Estensione>60: #NUM
dove #NUM è il risultato dell’operazione di conteggio.
4) Eliminare dalla collezione farmacie tutti gli elementi con campo Note pari a: “Non effettua servizio di CUP”.
[PUNTO 4] Numero di farmacie presenti dopo filtraggio: #NUM
dove #NUM è il numero di documenti presenti nella collezione DOPO aver effettuato l’operazione di rimozione.
5) Aggiornare la farmacia di nome “FARMACIA PORTA LAME”, aggiungendo l’informazione relativa alle review (“Media Review”: “5/5”, “Numero Review”: 3). Stampare a video il documento json modificato [usare la funzione printjson].
6) Le farmacie possono disporre di sezione di FAQ (Frequently Asked Question). Le domande dispongono di un testo, una tipologia, una data, e sono inserite da utenti; questi ultimi possono essere anonomi oppure disporre di nome, cognome, età, luogo di nascita (i campi sono opzionali). In alcune domande, le farmacie possono inserire le rispettive risposte: le risposte dispongono di testo e data. Modellare la bacheca nel database farmacieBO, definendo le collezioni da creare. Popolare quindi la/e collezione/i con dati presenti nel file faq.txt (file presente sulla pagina Web del corso).
Usare popolamento manuale à sequenza di istruzioni insert.
[NOTA. Il numero di collezioni da creare è a scelta dello studente. In alternativa alla creazione di nuove collezioni, è possibile lavorare solo sulla collezione farmacie aggiornandola opportunamente].
7) Scrivere la query che restituisce il numero di domande presenti nella bacheca della
“FARMACIA DUE TORRI”, e stampa il seguente messaggio:
[PUNTO 7] Numero DOMANDE nella Farmacia Due Torri: #NUM
8) Scrivere la query che restituisce il numero totale di risposte presenti nella bacheca della
“FARMACIA DUE TORRI” e stampa il seguente messaggio:
[PUNTO 8] Numero RISPOSTE nella Farmacia Due Torri: #NUM
[NOTA. In JavaScript si può ottenere la dimensione di elementi in un array attraverso il campo length, ossia: nomeArray.length].
9) Scrivere la query che stampa a video nome, lat e long (solo questi campi) delle farmacie che ospitano, nella loro bacheca, domande di utenti nati a Bologna, e con età maggiore di 30 anni. Messaggio da stampare:
[PUNTO 9] Farmacie: #NOME - #LAT - #LONG
10) Scrivere la query che rimuove tutte le domande dalla bacheca della “FARMACIA DUE TORRI” che fanno riferimento alla Tipologia “Prenotazione farmaco”. Stampa il seguente messaggio:
[PUNTO 10] Numero domande dopo filtraggio: #NOME
dove #NUM è il numero di documenti presenti nella collezione DOPO aver effettuato l’operazione di rimozione.
--- NOTE PER LO SVOLGIMENTO
L’esercizio può essere svolto/testato in due modi:
1) Inserendo tutto il codice nel file consegna2.js e caricando il file attraverso l’interfaccia del tool Robo 3T (File à Open à Run)
2) Da riga di comando, passando il file in input all’interprete di shell mongo (posizionarsi nella stessa cartella in cui è installato il DBMS)
mongo.exe nomefile (Ambiente Windows)
./mongo nomefile (Ambiente Linux/Unix/Mac OS)
In fase di consegna, specificare nel campo NOTE se l’esercizio è stato testato da interfaccia Robo 3T o da interprete di comandi.
Utilizzare la versione MongoDB Community Edition disponibile sul sito del DBMS.
(https://docs.mongodb.com/manual/administration/install-community). Ricordarsi di
avviare il server del DBMS ove necessario (in ambiente MACOS/Linux si deve avviare il demone mongod).
--- VINCOLI DI CONSEGNA
• L’implementazione della base di dati deve essere completa rispetto alle specifiche, e funzionante.
• NON sono consentite consegne di gruppo. Consegne multiple (ossia stesso codice da parte di più studenti) NON sono valutate.
• Inserire ove possibile dei commenti nel codice (in JavaScript i commenti si inseriscono –come in Java- tramite i caratteri speciali: //Commento su una riga o /* Commento su più righe */).
• Seguire esattamente le specifiche del testo per quanto riguarda i nomi del database, collezioni, etc.
• La consegna deve avvenire attraverso la piattaforma indicata nella prima pagina, ed entro la deadline stabilita. Consegne via email NON saranno valutate.
• L’assegnamento del bonus è una funzione booleana (assegnato/non assegnato).