Home Informatica I miei howto MongoDB e Fedora

PostHeaderIcon MongoDB e Fedora

In questa epoca di social network "in ogni dove", hanno preso piede nuovi database distribuiti non relazionali che vengono sommariamente raggruppati con la parola NoSQL.
In questo breve articolo vediamo come installare ed eseguire alcune operazioni fondamentali con MongoDB (http://www.mongodb.org) sotto Fedora 15 (ma anche per la nuova Fedora 16 che installerò quanto prima).

Installazione e avvio di MongoDB

I pacchetti da installare per poter utilizzare MongoDB sul proprio sistema sono i seguenti:

libmongodb
mongodb
mongodb-server

È possibile installarli tutti lanciando il comando:

# yum install -y libmongodb mongodb mongodb-server

Se tutto va bene, al termine dell'installazione dei pacchetti e delle eventuali dipendenze, dovrebbe essere possibile avviare MongoDB con li comando

# service mongod start

Ora l'istanza del server di MongoDB dovrebbe essere attiva sulla porta 27017. MongoDB mette a disposizione anche un'interfaccia web per accedere a varie informazioni del sistema, che possiamo visualizzare con il nostro browser scrivendo l'indirizzo http:http://127.0.0.1:28017/.

Interfaccia web del server mongod

Primi passi

Ora che abbiamo il server in funzione, facciamo partire la shell di Mongo (per default si collega a localhost):

$ mongo

Ora è possibile interagire con MongoDB. Per esempio si può utilizzare il comando help oppure db.help per avere informazioni sui comandi disponibili.
La prima cosa che potremmo fare adesso è "creare" un nuovo database per iniziare a fare le nostre prove. Ho scritto la parola tra virgolette perché in MongoDB non si crea esplicitamente un database come per esempio accade con MySQL o altri RDBMS. In MongoDB si usa l'istruzione use come in altri database per muoversi da un DB ad un altro. Se questo DB non esiste, viene creato implicitamente.
Vediamo un esempio:

> show dbs
admin   (empty)
local   (empty)
test    (empty)
> use poppy
switched to db poppy
> show dbs
admin   (empty)
local   (empty)
test    (empty)
> db.poppy.insert({"nome" : "Alessandro", "cognome" : "Moreschi"});
> show dbs
admin   (empty)
local   (empty)
poppy   0.203125GB
test    (empty)

Dopo l'operazione di inserimento il nuovo database compare nella lista.
Vediamo ora cosa c'è dentro il nostro database:

> db.poppy.find()
{ "_id" : ObjectId("4ebfe18b962ec8e35f7928f3"), "nome" : "Alessandro", "cognome" : "Moreschi" }

Quando viene inserito nel database, ad ogni oggetto (se non ce l'ha già) viene assegnato un object ID nel campo _id.
Aggiungiamo un altro oggetto al nostro database:

> db.poppy.save({"nome" : "Mirko", "cognome" : "Trambaioli"});
{ "_id" : ObjectId("4ebfe18b962ec8e35f7928f3"), "nome" : "Alessandro", "cognome" : "Moreschi" }
{ "_id" : ObjectId("4ebfe3ebef68505f411db36e"), "nome" : "Mirko", "cognome" : "Trambaioli" }

Il metodo find() ci consente di eseguire delle query sul nostro DB. Se volessimo selezionare una riga in particolare, per esempio quella dove il nome è "Alessandro", dovremmo utilizzare il metodo find() in questo modo:

> db.poppy.find({nome:"Alessandro"});
{ "_id" : ObjectId("4ebfe18b962ec8e35f7928f3"), "nome" : "Alessandro", "cognome" : "Moreschi" }

Questa istruzione corrisponde a quella che in SQL sarebbe una

SELECT * FROM poppy WHERE nome = 'Alessandro';

In realtà questo è un caso particolare, perché find() restituisce un cursore. Nel nostro caso però abbiamo un solo oggetto. Per evitare di utilizzare un cursore, occorre usare il metodo findOne(), che dispone degli stessi parametri ma invece di restituire un cursore, restituisce la prima occorrenza di un oggetto che corrisponda ai parametri della ricerca.
Abbiamo inserito degli oggetti nella nostra collezione, ora vediamo come rimuoverli. Per rimuoverli si utilizza il metodo remove() (facendo attenzione perché senza parametri rimuove l'intera collezione, eseguendo cioè una vera e propria drop):

> db.poppy.remove({nome:"Mirko"});
> db.poppy.find()
{ "_id" : ObjectId("4ebfe18b962ec8e35f7928f3"), "nome" : "Alessandro", "cognome" : "Moreschi" }

Vediamo ora come modificare un oggetto già presente dentro la nostra collezione: immaginiamo di voler cambiare la proprietà "cognome" di un oggetto:

> user = db.poppy.findOne({nome:"Alessandro"});
{ "_id" : ObjectId("4ebfe18b962ec8e35f7928f3"),
"nome" : "Alessandro",
"cognome" : "Moreschi"
}
> user.cognome = "della Parulara";
della Parulara
function print() {
[native code]
}
> db.poppy.save(user);
> user = db.poppy.findOne({nome:"Alessandro"});
{
"_id" : ObjectId("4ebfe18b962ec8e35f7928f3"),
"nome" : "Alessandro",
"cognome" : "della Parulara"
}

Per ulteriori esempi o chiarimenti, per il momento rimando alla documentazione online sul sito di MongoDB, che mi sembra piuttosto curata e chiara.

Ultimo aggiornamento (Domenica 13 Novembre 2011 16:42)

 
Sondaggio
Per combattere l'evasione fiscale, bisognerebbe...
 
Perle di saggezza

Le verità scientifiche non si decidono a maggioranza.

Galileo Galilei

Ultime via Twitter
twitter Bird