Denny Biasiolli Website

Database NoSQL - Usare MongoDB con PHP - Breve guida

Sep 3, 2010

Mecroledì sera durante un'uscita con Ferre abbiamo parlato dei database NoSQL. Incuriosito da questa tecnologia ho deciso di effettuare dei test in PHP. Per evitarvi una lunga serie di ricerche vi mostro come fare in pochi e semplici passaggi.
Googlando ho trovato diversi sistemi, ma quello che mi ha colpito di più è stato MongoDB.
Per prima cosa bisogna scaricare e installare MongoDB (sul sito si possono trovare delle guide dettagliate per l'installazione su ogni tipo di sistema operativo) e il client MongoDB per PHP Copiare l'estensione per mongo nella cartella "ext" di php e aggiungere il riferimento nel file php.ini (esempio per windows)

extension=php_mongo.dll

scrivere anche la riga sottostante per permettere al php di interpretare il carattere ":" come comando, in quanto quello predefinito è "$", che in php è usato per scrivere le variabili all'interno di una stringa
mongo.cmd=":"

scrivere anche la riga sottostante per utilizzare il formato utf8 nell'archiviazione dei dati di mongo, oppure impostare a "0" per disattivare il salvataggio in utf8
mongo.utf8="1"

Attenzione, impostando l'utf8 bisognerà prestare attenzione ad utilizzare la funzione "utf8_encode()" prima di scrivere le variabili nel database.
A questo punto è necessario riavviare apache per attivare le modifiche.
Impostare una password sul database
Lanciare da shell i seguenti comandi
mongo
use admin
db.addUser("admin", "js8K92fDgf")

Lo stesso comando può essere usato per modificare la password di un utente esistente. Ora per accedere al database sarà necessario autenticarsi in questo modo
db.auth("admin", "js8K92fDgf")

Per eliminare un utente possiamo usare questo comando
db.system.users.remove({user: "admin"})

Connessione in PHP
$mongo_host='localhost:27017';
$mongo_db=''; // per selezionare un database specifico bisogna inserire '/nome_database'
$mongo_user='admin';
$mongo_pwd='js8K92fDgf';
$conn = new Mongo("mongodb://$mongo_user:$mongo_pwd@$mongo_host$mongo_db");

Utilizzo del database
Per collegarsi a database o tabelle specifiche non è necessario crearle, basta utilizzarle una volta e mongo crea in automatico la struttura desiderata.
$db = $conn->nomeDatabase;
$table = $db->nomeTabella;

Inserimento dati
Nel database possiamo inserire ogni tipo di dati, utilizzando variabili strutturate come nell'esempio seguente
$u=null;
$u->nome = utf8_encode("Denny");
$u->cognome = utf8_encode("Biasiolli");
$u->eta = 24;
$u->pos->x = 203;
$u->pos->y = 102;
$u->documenti[] = "Patente";
$u->documenti[] = "Passaporto";
$table->insert($u);

L'id del record inserito è salvato nella variabile $u dopo la insert, possiamo leggerlo con
echo $u->_id;

Ricerca, ordinamento, visualizzazione dati ed eliminazione
Per ricercare i dati bisogna creare una query nel seguente modo
$query=null;
//regex case insensitive
$query->nome=new MongoRegex('/'.utf8_encode('d(e|è|é)nny').'/i');

//età maggiore di 17
$query->eta[':gte']=17; // gte = 'greather than / equal'

//età minore di 32
$query->eta[':lte']=32; // lte = 'less than / equal'

//eseguire la ricerca
$cursor = $table->find($query);
//$cursor = $table->find($query)->limit(2); //imposta il numero di risultati

//ordinare i risultati
$cursor->sort(array('eta' => 1)); //1=crescente / -1=decrescente

//visualizzare i risultati
foreach ($cursor as $obj)
{
echo $obj['cognome'].' '.$obj['nome'].' - '.$obj['eta'].' anni';
}

//eliminare un determinato record
$table->remove(array('_id' => $obj['_id']), true);

Se vi interessa questa tecnologia potete approfondire le vostre conoscenze sul sito di MongoDB, dove potrete trovare moltissime informazioni..buon divertimento!

Contacts

DB di Denny Biasiolli
Corso Giacomo Matteotti, 24
12038 Savigliano (CN) - Italy
P.IVA IT03918020045

Need to get in touch with me? No problem! Just shoot me an email. I'm always happy to chat about life, technology, or anything in between. And if you're feeling really adventurous, you can even try sending a carrier pigeon. Just don't be surprised if it gets lost on the way.