Pour utiliser une base MongoDB avec PHP, il faut installer l’extension Mongo (http://www.php.net/manual/en/mongo.installation.php). Comme c’est assez simple, ayant déjà tous les outils pour compiler une extension PHP, j’ai du coup préféré la voie de la compilation:
On commence par se créer un répertoire, et on choppe les sources sur le dépôt officiel git:
$ git clone http://github.com/mongodb/mongo-php-driver.git
Initialized empty Git repository in /tmp/mongodb/php/mongo-php-driver/.git/
remote: Counting objects: 4106, done.
remote: Compressing objects: 100% (1338/1338), done.
remote: Total 4106 (delta 3100), reused 3670 (delta 2742)
Receiving objects: 100% (4106/4106), 1.02 MiB | 269 KiB/s, done.
Resolving deltas: 100% (3100/3100), done.
La compilation et l’installation du module ne diffère pas par rapport à un autre module PHP:
$ phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
$ ./configure --enable-mongo
[...]
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
$ make
[...]
Build complete.
Don't forget to run 'make test'.
Et finalement, en tant que root:
Installing shared extensions: /usr/lib/php/modules/
$ cat > /etc/php.d/mongo.ini << EOF
> extension=mongo.so
> EOF
On pourra vérifier la présence de l’extension:
/etc/php.d/mongo.ini,
MongoDB Support => enabled
[...]
Il ne reste plus qu’à tester du code php. La documentation est ici http://www.php.net/manual/en/mongo.manual.php.
Dans le script suivant, je prends pour exemple la base que j’ai créée dans un précédent article, et j’en adapte mes actions à un petit script PHP qui s’explique – presque – tout seul:
// Connection sur le serveur
$mongo_cnx = new Mongo();
// On utilise la base de données 'testdb' avec laquelle
// on a fait des tests précédemment:
$db = $mongo_cnx->testdb;
// On 'scanne' la collection 'people' dans laquelle
// on va retrouver nos enregistrements:
foreach($db->people->find() as $person)
{
echo $person['name'] . ' - ' . $person['age'] . "\n";
}
// xin - 24
// patrick - 28
// patrick - 27
// On peut rajouter de nouvelles données:
$db->people->insert( array('name' => 'red', 'age' => 12) );
// On peut également faire des requetes plus précises comme dans
// le 'pseudo shell' mongo:
$red = $db->people->findOne( array('age' => 12) );
// $red sera:
// array(3) {
// ["_id"]=>
// object(MongoId)#7 (0) {
// }
// ["name"]=>
// string(3) "red"
// ["age"]=>
// int(12)
// }
// Mise à jour de notre objet, en spécifiant un nouveau champs:
$red['city'] = 'Paris';
// Une mise à jour prend en premier argument le critère descriptif
// des objets à updater et l'objet à utiliser comme modification.
$db->people->update(array('name' => 'red', 'age' => 12), $red);
echo "There is now " . $db->people->count() . " person(s) in database.\n";
// On vérifie que la modification a été effectuée:
var_dump( $db->people->findOne( array('name' => 'red') ) );
// array(4) {
// ...
// ["city"]=>
// string(5) "Paris"
// Et les supprimer:
$r = $db->people->remove($red);
if( $r ) echo "Record deleted !\n";
$red = $db->people->findOne( array('name' => 'red') );
var_dump($red);
// Renvoie NULL.