• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Introduzione a MongoDB e ai database NoSQL

By Giuseppe Maggi | on 25 Agosto 2016 | 0 Comment
Senza categoria

Da alcuni anni, l’informatica ha visto la diffusione del cosiddetto movimento NoSQL che ha proposto, con successo, alternative allo sviluppo di database relazionali. Chiariamo subito che NoSQL non è – come potrebbe sembrare – un netto rifiuto del linguaggio SQL ma la sintesi di “Not only SQL” quindi un approccio che mira ad aprire gli orizzonti dei progettisti software.

I database tradizionalmente sono basati sull’approccio relazionale dove tutti i dati sono scritti in tabelle messe in relazione tra loro tramite chiavi. Questo metodo è fortemente strutturato infatti si sa che il primo passo per progettare un database consiste nel definire la struttura delle tabelle: ogni riga in essa inserita – solitamente detta record – avrà tutti i comandi previsti, anche se di valore nullo. Inoltre i database relazionali sono dominati dalle cosiddette proprietà acide, termine derivato dalla sigla ACID (Atomicity-Consistency-Isolation-Durability), secondo le quali le transazioni di interazione con il database devono essere atomiche (le operazioni che le compongono devono andare in porto tutte altrimenti l’intera transazione sarà annullata), consistenti (non devono violare la coerenza dei dati presenti nel database), isolate (gli effetti di due transazioni concorrenti devono essere gli stessi di una loro esecuzione in cascata) e duraturi (quando la transazione è conclusa i suoi risultati devono essere persistenti nel database).

I software NoSQL hanno conquistato i favori di buona parte del mondo informatico nonostante abbiano stravolto le concezioni alla base dei database relazionali come l’obbligatorietà della struttura delle tabelle e l’inviolabilità delle proprietà acide.

In questo post presentiamo MongoDB considerato uno dei DBMS più usati al mondo. Lo vedremo all’opera in un breve viaggio che ci porterà dalla sua installazione fino all’utilizzo delle principali operazioni sui dati.

Installare MongoDB

MongoDB è un progetto open source e multipiattaforma pertanto possiamo creare la nostra installazione su ogni sistema operativo. Alla pagina dei Download, vengono messe a disposizione sorgenti e file binari di diverse versioni. Molte distribuzioni Linux offrono pacchetti di installazione già pronti che possono essere un modo molto comodo per iniziare a sperimentarlo subito: unico neo è che tali versioni non sono molto aggiornate.

Noi proveremo MongoDB su un’installazione Ubuntu Server 14.04, ottenendolo tramite pacchetti offerti dalla distribuzione, ma tutto quello che diremo nei prossimi paragrafi a proposito di questo prodotto sarà di utilità universale.

Nella nostra macchina Ubuntu, sarà sufficiente acquisire i privilegi da super-user e digitare:

> apt-get update
> apt-get install mongodb

Il procedimento di installazione preparerà l’ambiente sulla nostra postazione e, soprattutto, metterà a disposizione il server, mongod, e la console che useremo per inviare comandi, mongo.

Usiamo MongoDB: creazione e lettura di documenti

Il bello del NoSQL è che possiamo iniziare ad inserire dati, a sperimentare immediatamente senza passare tempo a progettare tabelle e strutture.

MongoDB segue la filosofia “a documenti”, una delle varie che popolano il mondo NoSQL, quindi tutto ciò che nel relazionale consideravamo un record ora è un documento, strutturato fisicamente come oggetto JSON. Più documenti insieme compongono il corrispondente di una tabella relazionale che in MongoDB prenderà il nome di Collection.

Avviato il servizio mongod, attiveremo la console invocando il comando mongo.

Appena risponde il prompt di MongoDB, digitiamo quanto segue:

> use nuovidocumenti;

In pratica, stiamo chiedendo di utilizzare il database nuovidocumenti che, se non esiste, viene creato all’istante. Da ora, questo sarà il database attivo e nella console vi faremo riferimento tramite l’oggetto db.

Inseriamo dei dati al suo interno:

> db.persone.insert({"nome":"carlo", "cognome":"rossi", "eta":34, "automunito":true});

Con questo, stiamo chiedendo di inserire nella collection denominata persone – se non esiste sarà definita all’istante anch’essa – un nuovo documento per il quale saranno specificate proprietà e valori tramite un oggetto JSON.

Inseriamone altri:

> db.persone.insert({"nome":"elio", "cognome":"verdi", "eta":21, "automunito":true});
> db.persone.insert({"nome":"silvia", "cognome":"gialli", "eta":31, "automunito":true});
> db.persone.insert({"nome":"elena", "cognome":"bianchi", "eta":28, "automunito":false});

Possiamo ora vedere il contenuto della nostra collection tramite la funzione find():

{ "_id" : ObjectId("56f82b528d2acfe22e933763"), "nome" : "carlo", "cognome" : "rossi", "eta" : 34, "automunito" : true }
{ "_id" : ObjectId("56f82b638d2acfe22e933764"), "nome" : "elio", "cognome" : "verdi", "eta" : 21, "automunito" : true }
{ "_id" : ObjectId("56f82b778d2acfe22e933765"), "nome" : "elena", "cognome" : "bianchi", "eta" : 28, "automunito" : false }
{ "_id" : ObjectId("56f82b948d2acfe22e933766"), "nome" : "silvia", "cognome" : "gialli", "eta" : 31, "automunito" : true }

Come possiamo notare, ci sono tutti i dati che abbiamo inserito sinora con le quattro scritture ma ogni documento è dotato di un ulteriore campo, denominato _id, che ne rappresenta l’identificatore univoco.

La funzione find() permette anche di eseguire dei filtri, specificandone le condizioni in un oggetto JSON che svolgerà il ruolo del WHERE nelle query relazionali.

Cerchiamo, ad esempio, tutti gli automuniti presenti nella collezione:

> db.persone.find({"automunito":true});

Il risultato proposto in output evidenzierà solo i documenti che vantano la proprietà automunito impostata a true.

Possiamo anche contare quanti sono i documenti nella collezione:

> db.persone.find().count();

oppure contare quanti sono gli automuniti

> db.persone.find({"automunito":true).count();

In base ai dati che abbiamo inserito, il primo comando restituirà 4, il secondo 3.

La funzione find() ricopre un ruolo centrale in quanto concede accesso ad una collezione o ad un sottoinsieme dei suoi record. Come count(), possiamo applicare sort() ai risultati di find() per poterli ordinare, ad esempio:

> db.persone.find().sort({"nome":1});

Con questo comando, tutti i documenti saranno ordinati per nome, in senso ascendente. L’oggetto JSON passato a sort() mostra la proprietà in base alla quale si svolgerà l’ordinamento e il valore 1 che significa “ordinamento ascendente”. Questi i risultati:

{ "_id" : ObjectId("56f82b528d2acfe22e933763"), "nome" : "carlo", "cognome" : "Rossi", "eta" : 34, "automunito" : true }
{ "_id" : ObjectId("56f82b778d2acfe22e933765"), "nome" : "elena", "cognome" : "bianchi", "eta" : 28, "automunito" : false }
{ "_id" : ObjectId("56f82b638d2acfe22e933764"), "nome" : "elio", "cognome" : "verdi", "eta" : 21, "automunito" : true }
{ "_id" : ObjectId("56f82b948d2acfe22e933766"), "nome" : "silvia", "cognome" : "gialli", "eta" : 31, "automunito" : true }

come si vede i documenti elencati sono riferiti a “carlo”, “elena”, “elio”, “silvia”.

Con il comando

> db.persone.find().sort({"nome":-1});

i documenti saranno presentati in ordine inverso:

{ "_id" : ObjectId("56f82b948d2acfe22e933766"), "nome" : "silvia", "cognome" : "gialli", "eta" : 31, "automunito" : true }
{ "_id" : ObjectId("56f82b638d2acfe22e933764"), "nome" : "elio", "cognome" : "verdi", "eta" : 21, "automunito" : true }
{ "_id" : ObjectId("56f82b778d2acfe22e933765"), "nome" : "elena", "cognome" : "bianchi", "eta" : 28, "automunito" : false }
{ "_id" : ObjectId("56f82b528d2acfe22e933763"), "nome" : "carlo", "cognome" : "rossi", "eta" : 34, "automunito" : true }

Rimozione e modifica dei documenti

Oltre a lettura ed inserimento, è possibile anche cancellare e rimuovere dati con la console di mongo. La rimozione opera sulla collection mediante la funzione remove():

db.persone.remove({"cognome":"verdi"});

Il comando appena visto cancella tutti i documenti che possiedono una proprietà “cognome” il cui valore è impostato a “verdi”. Anche in questo caso un oggetto JSON è stato utilizzato per definire quella che in un comando per database relazionali sarebbe la clausola WHERE.

Nella funzione update(), dovremo passare due oggetti JSON per attuare la modifica: il primo servirà per filtrare i documenti che subiranno la modifica, il secondo descriverà le operazioni da svolgere.

Con il comando

db.persone.update({"cognome":"verdi"},{ $set:{"nome":"alfredo"}});

cerchiamo tutti i documenti in cui il cognome è impostato a “verdi” e modifichiamo il nome in “alfredo” qualunque esso sia. La descrizione della modifica è stata definita come proprietà $set del secondo oggetto per specificare che il contenuto restante del documento deve essere conservato.

Conclusioni

Quanto abbiamo visto in questo articolo non è che un avvio rapido a MongoDB: poche indicazioni schematiche per avere chiari gli scopi del sistema, installarlo e svolgere le prime operazioni basilari. Ovviamente, c’è ancora molto da approfondire tra cui, in primis, i modi con cui si può affinare le ricerche della funzione find(), vista la centralità di questa nell’interazione con il database. Noi, da parte nostra, continueremo a mostrare usi ed applicazioni di questo DBMS includendo, come presumibile, un ambiente ad esso particolarmente congeniale: Node.js.

 

Share this story:
  • tweet

Tags: Databasemongodbnosqltutorial mongodbTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • MariaDB, la versione indipendente di MySQL

    25 Giugno 2018 - 0 Comment
  • RestHeart, creare rapidamente API per MongoDB

    8 Gennaio 2018 - 0 Comment

Author Description

No Responses to “Introduzione a MongoDB e ai database NoSQL”

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO