Capitolo 1

Come installare MongoDB


Capitolo 1: Introduzione e Basi


Introduzione database no-SQL
Join, Transaction e Pre-Join
MongoDB in un'App
Come installare MongoDB
JSON e BSON
Schema Dinamico
Da Relazionale ai Documenti
Schema Design

Come installare MongoDB

MongoDB può essere installato su tutti i più famosi sistemi operativi: Windows, Linux, MAC OS X

Installare MongoDB

Ahh era ora, abbiamo parlato un sacco di quanto è bello Mongo teoricamente ma non sappiamo ancora nulla di come funziona nella pratica, finalmente in questa lezione possiamo vederlo; ma ovviamente prima dobbiamo installarlo, quindi procediamo :)


Cominciamo subito con l’andare su google, scriviamo “MongoDB download” ed entriamo nel primo risultato organico, quindi non su eventuali pubblicità.

Ci troveremo di fronte una pagina come questa. Attualmente è disponibile la versione 3.0.6, selezioniamo il nostro sistema operativo e scarichiamo il file.

Io uso Windows quindi vedremo come si installa MongoDB su Windows 10. Per tutti gli altri che usano Mac e Linux…beh confido nella vostra intelligenza, suppongo riuscirete comunque nell’impresa, se poi doveste avere problemi qui trovate le istruzioni o chiedete pure sul forum.
Torniamo a Windows, selezioniamo il file nella versione 64bit e clicchiamo download. Per fare dei test si potrebbe usare anche la versione a 32 bit, ma ha delle limitazioni quindi è da escludere per la produzione.


Ora che abbiamo scaricato l’eseguibile, apriamolo e avviamo l’installazione: avanti, accettiamo la licenza, installazione completa, installa e attendiamo...eee...fatto!


È stata dura…andiamo a frugare le cartelle e vediamo cosa ha installato.

Andiamo su C, programmi, MongoDB, server, versione 3, bin. In questa cartella abbiamo una serie di eseguibili, quelli che andremo ad usare più spesso sono mongo e mongod, mongo è la shell mentre mongod è il server.

Prima di poterli usare dal nostro prompt dei comandi di windows dobbiamo fare una cosa, copiamo il percorso della cartella bin e andiamo su sistema, impostazioni di sistema avanzate, clicchiamo su variabili d’ambiente e nel riquadro variabili del sistema cerchiamo Path. Clicchiamo su modifica, andiamo alla fine, aggiungiamo il punto e virgola, e incolliamo qui il percorso.


Ok, ok e ok, adesso possiamo lanciare gli eseguibili presenti nella cartella bin direttamente dal prompt dei comandi di Windows, proviamo subito.

Apriamo il prompt e scriviamo

mongo --version

Se anche voi avete una scritta come questa possiamo continuare altrimenti avete sbagliato qualcosa nel passaggio precedente.


Ok, creiamo una nuova cartella per salvare i nostri dati del database, copiamo il path

e adesso possiamo lanciare mongod. Per farlo usiamo l’opzione

--dbpath PERCORSO

Eccolo qui, il server è partito e rimane in esecuzione fintanto che non chiudiamo la finestra.

Questi sono i vari log di mongod, se guardiamo meglio possiamo leggere che il server è in ascolto alla porta 27.017, che è la porta di default, e che per i dati utilizza la cartella XXX.


Adesso apriamo un altro prompt e da qui lanciamo la shell amministrativa e vedere se  cambia qualcosa nei log del server.

Prima abbiamo lanciato mongod per il server quindi ora lanciamo mongo per la shell, tenterà di connettersi al localhost alla porta 27017. Perfetto, siamo dentro e adesso possiamo interagire direttamente con il database. Se guardate i log del database possiamo vedere il nostro accesso.

Ovviamente la shell funziona perché è connessa al server, se dovessimo chiudere la finestra di mongod la shell perderebbe la connessione.

Abbiamo un interprete javascript quindi possiamo scrivere somme o cicli.


Prendiamo confidenza con la Shell

Benissimo abbiamo completato correttamente l’installazione su Windows. Le proprietà di MongoDB sono comuni in tutti i sistemi operativi quindi tutto quello che faccio io tramite la mia shell potete farlo anche voi a prescindere dal sistema che state usando.

L’abbiamo installato ma non l’abbiamo ancora veramente usato quindi vediamo subito di fare qualche prova pratica.


Innanzitutto quando lanciamo mongod possiamo specificare delle opzioni, abbiamo già visto --dbpath PERCORSO

per indicare la cartella in cui salvare il database. In produzione probabilmente aggiungeremo anche --fork che mantiene il processo aperto anche dopo aver chiuso la finestra oppure --logfile specificando un percorso per poter salvare i file di log, però dato che qui siamo in locale ed è per scopo dimostrativo va benissimo anche solo specificare --dbpath.


Adesso apriamo un altro prompt e colleghiamoci al server, per farlo ci basterà scrivere mongo per lanciare la shell amministrativa che si connetterà di default in locale al database di test. Perfetto, siamo dentro, vediamo ora qualche comando:

DB

ci mostrerà in quale database ci troviamo mentre con

Show DBS

possiamo avere la lista di tutti i database. Possiamo spostarci in altri database usando:

USE nome_database

ad esempio USE demo, questo database non c’era nella lista perché in realtà non esisteva ancora, anche adesso che ci stiamo spostati al suo interno non è realmente stato creato poiché viene creato automaticamente quando tentiamo di usarlo.

Proviamo a fare un operazione nel database, scriviamo:

db.animals.find()

db è un oggetto speciale all’interno della shell e identifica il nostro database, users è il nome della collection che ovviamente ancora non esiste e find è il comando che equivale a una Select, quindi è una ricerca. Quando scriviamo questo comando stiamo dicendo a Mongo: “vai, prendi il database in uso (in questo caso demo), considera la collection Animals e cerca tutti i documenti al suo interno”.

Ovviamente il risultato è vuoto perchè non abbiamo mai usato prima questa collection che materialmente non esiste, ma viene creata automaticamente quando si inserisce il primo oggetto. Ok, adesso vediamo nel lato pratico i vari esempi che abbiamo fatto sugli animali, proviamo ad inserirne uno, il delfino:

db.animals.insert( { name:”delfino”,color:”grigio”})

Ricordiamoci che tutti i documenti JSON devono essere tra parentesi graffe {}, aggiungiamo anche gli oceani, oceans, come un array [“atlantico”,”pacifico”,”indiano”].

Per vedere tutti i nostri documenti scriviamo:

db.animals.find()


Possiamo vedere che è stato aggiunto _id di tipo ObjectID, questo è un attributo speciale che viene inserito automaticamente da Mongo quando non viene specificato durante l’inserimento.


Proviamo ad inserire un nuovo documento JSON, ad esempio aggiungiamo la pantera:

db.animals.insert( { name:”pantera”,color,”nero” } )


Ci ha dato un errore di sintassi perchè il nostro documento è scritto male, nel primo elemento abbiamo chiave name e valore Pantera ed è corretto, poi abbiamo la virgola che indica di passare all’elemento successivo. Nel secondo elemento abbiamo soltanto color ma non abbiamo precisato se chiave o valore e subito dopo abbiamo un’altra virgola che ci indica di passare all’elemento successivo “nero”, sbagliatissimo, ogni elemento JSON deve avere sempre una chiave ed un valore quando questi non ci sono ovviamente la shell ci segnala l’errore. Correggiamolo:

db.animals.insert( { name:”pantera”,color:”nero” } )


Proviamo ora ad aggiungere qualcosa di più complesso, ad esempio in quale zoo la possiamo trovare. Facciamo un array di sottodocumenti dove ognuno è l’indirizzo di un diverso zoo:
zoos: [
    {

    name:”Zoo di Dublino”,

    address: {   

            street:”Phoenix park, Dublino 8”,

city: “Dublino”,

country:”Irlanda”

}

}
]

Vediamo come si presenta nostra collection:

db.aniamsls.find()

quando usiamo find possiamo mettere delle condizioni sempre in formato JSON, ad esempio possiamo dire {name:“pantera”} in questo modo cercherà tutti i documenti in cui la chiave nome corrisponda al valore Pantera.
Cosi si legge un po’ male quindi usiamo

db.animals.find().pretty()

adesso si vede decisamente meglio, abbiamo due documenti con strutture diverse e qui in zoo ogni zoo è un sottodocumento.


Bene, adesso facciamo un’altra prova:

db.animals.findOne({name:”pantera”})

findOne a differenza di find ci restituisce solo 1 risultato. Proviamo, perfetto.

Ricordiamoci che siamo su javascript quindi possiamo scrivere qualcosa come

var p = db.animals.findOne({name:”pantera”})

ora in p abbiamo il nostro documento. Proviamo a modificarlo aggiungendo un altro attributo:

p.legs = 4

db.animals.save(p)

db.animals.find().pretty()

Vedete? È stato salvato. Per fare la modifica abbiamo usato la funzione save che è una sorta di scorciatoia per un update o per una insert. Se scriviamo db.animals.save senza parentesi Mongo ci mostra il codice della funzione...guardate, qui c’è una condizione che controlla se la variabile ricevuta possiede l’attributo _id, se lo possiede fa un update altrimenti un insert dal momento che non esiste un identificativo. Sembra difficile ma non preoccupatevi, lo vedremo meglio nella seconda parte del corso.

Per vedere la lista di tutti i comandi disponibili possiamo digitare il comando:

help

Possiamo anche lanciare l’help per ogni oggetto speciale, come ad esempio per i database e le collection:

db.help()

db.nome_collection.help()

ma può essere anche lanciato per lo sharding o per il replica set.

Un altro comando utile è il comando show che consente di mostrare le liste dei database:

show dbs

e delle collection:

show collections


Insomma, ci sono davvero tantissimi comandi che vi consiglio di scoprire ;)