Introduzione all'utilizzo di MongoDB in PHP

di Giuseppe Maggi - 16 novembre 2012

database MongoDB

Database di esempio

Nel seguito dell'articolo si immaginerà di gestire in MongoDB un sistema di reclutamento di personale per un'azienda che richiede al candidato la  conoscenza di almeno uno tra i linguaggi di programmazione Java e PHP. Queste informazioni, insieme a quelle relative ad ogni altra competenza del candidato in materia informatica o linguistica, verranno conservate nel db e classificate con una valutazione da 1 a 10.

A titolo di esempio, il sistema conserverà in documenti appartenenti alla stessa collezione, sia i dati  del signor Ugo Rossi, competente in Java e PHP con le rispettive valutazioni di 10 e 7 e con un'abilità nella lingua inglese valutata anch'essa in 7/10, sia i dati del signor Silvio Verdi esperto di PHP e Python (entrambi voto 8) ma a conoscenza solo di pochi elementi della lingua inglese (voto 5).

Come anticipato, il formato usato da MongoDB per descrivere questi documenti è JSON. I dati dell'esempio corrisponderanno agli array JSON:

{
  "nome"    : "Ugo",
  "cognome" : "rossi",
  "Java"    : "10",
  "PHP"     : "7",
  "inglese" : "7"
}

e

{
  "nome"    : "Silvio",
  "cognome" : "Verdi",
  "Python"  : "8",
  "PHP"     : "8",
  "inglese" : "5"
}

Iniziamo a trattare questi dati in MongoDB facendo uso delle fondamentali operazioni fornite dalla console.

Per fare ciò avviamo il client mongo specificando indirizzo IP, porta TCP e nome del database (in questo caso denominato “prova”).

Si noti che non è richiesta l’esistenza del database a cui ci stiamo connettendo. Qualora richiedessimo la connessione ad un database non ancora esistente, Mongo lo creerà per noi, svolgendo una versione NoSQL del tradizionale CREATE DATABASE. Nel seguito vedremo come accadrà lo stesso per la creazione di una collection.

Adesso proviamo ad inserire i dati dei signori Rossi e Verdi in MongoDB e poi chiediamo al server di restituirceli con una ricerca:

> db.candidati.insert({nome: "ugo",cognome: "rossi",Java: "10",PHP: "7",inglese: "7"})
> db.candidati.insert({nome: "Silvio",cognome: "Verdi",Python: "8",PHP: "8",inglese: "5"})
> db.candidati.find()
{ "_id" : ObjectId("505335a0678b1ec66db608d3"), "nome" : "ugo", "cognome" : "rossi", "Java" : "10", "PHP" : "7", "inglese" : "7" }
{ "_id" : ObjectId("505335b9678b1ec66db608d4"), "nome" : "Silvio", "cognome" : "Verdi", "Python" : "8", "PHP" : "8", "inglese" : "5" }

Quello che è appena successo, in SQL, corrisponderebbe a due INSERT ed una SELECT. In termini NoSQL lo spieghiamo dicendo che sono stati inseriti nella collection “candidati” due documenti riportanti rispettivamente le competenze del sig. Ugo Rossi e del sig. Silvio Verdi, e poi ne è stato visualizzato il contenuto con il comando find.

Osservazioni importanti:

  • i comandi iniziano sempre con “db.” che fa riferimento al database corrente;
  • la collection "candidati" non esiste ancora ma al primo inserimento di un documento viene creata in automatico;
  • la chiave primaria non è stata inserita direttamente ma, osservando l'output del find(), si vede che ogni documento ha un suo _id che costituisce un identificativo univoco del documento creato automaticamente dal server.
Effettua l'accesso o registrati per inserire un commento