Pour se connecter à un serveur de base de données, utilisez une des façons suivantes :
<?php
$connection = new Mongo(); // Connexion à localhost:27017
$connection = new Mongo( "example.com" ); // Connexion à un hôte distant (en utilisant le port par défaut)
$connection = new Mongo( "example.com:65432" ); // connect to a remote host at a given port
?>
Pour sélectionner une base de données, utilisez :
<?php
$db = $connection->dbname;
?>
<?php
$db = $connection->mybiglongdbname;
// Plus de codes ici...
$db = $connection->mybiglongdbnme;
// Maintenant, vous êtes connecté à une base de données différente !
?>
Récupérer une connexion utilise la même syntaxe que de récupérer une base de données :
<?php
$db = $connection->baz;
$collection = $db->foobar;
// ou, plus succinctement
$collection = $connection->baz->foobar;
?>
Les tableaux associatifs sont les objets basiques qui peuvent être insérés dans une collection d'une base de données. Un document "document" peut être :
<?php
$doc = array( "name" => "MongoDB",
"type" => "database",
"count" => 1,
"info" => (object)array( "x" => 203,
"y" => 102),
"versions" => array("0.9.7", "0.9.8", "0.9.9")
);
?>
Pour insérer ce document, utilisez la méthode MongoCollection::insert():
<?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert( $doc );
?>
Pour montrer que le document inséré dans l'étape précédante est bien présent, nous pouvons simplement utiliser findOne() pour récupérer le premier document de la collection. Cette méthode retourne un seul document (à contrario de MongoCursor qui retourne un MongoCollection::find()), et elle est utile dans les cas où il n'y a qu'un seul document correspondant aux critères ou bien si vous ne souhaitez qu'un seul résultat.
<?php
$obj = $collection->findOne();
var_dump( $obj );
?>
array(5) { ["_id"]=> object(MongoId)#6 (0) { } ["name"] string(7) "MongoDB" ["type"]=> string(8) "database" ["count"]=> int(1) ["info"]=> array (2) { ["x"]=> int(203) ["y"]=> int(102) } ["versions"] array(3) { [0]=> string(5) "0.9.7" [1]=> string(5) "0.9.8" [2]=> string(5) "0.9.9" } }
Notez que le champ _id a été ajouté automatiquement à votre document. MongoDB réserve les noms d'éléments qui commencent par _ et $ pour une utilisation interne.
Afin de faire des requêtes plus intéressantes, commençons par ajouter plusieurs documents simples dans notre collection. Ces documents seront de la forme :
<?php
array( "i" => value );
?>
<?php
for($i=0; $i<100; $i++) {
$collection->insert( array( "i" => $i ) );
}
?>
Notez que vous pouvez insérer des tableaux avec des clés différentes dans la même collection. Cet aspect correspond à ce que nous avançons lorsque nous disons que MongoDB a "un schéma libre".
Maintenant que nous avons inséré 101 documents (le 100 noté dans la boucle, +1), nous pouvons vérifier le nombre de documents dans la collection en utilisant la méthode count().
<?php
echo $collection->count();
?>
MongoCollection::count() peut également prendre comme arguments une requête ou un champ. Vous pouvez également faire un comptage sur un curseur MongoCursor (voir ci-dessous), qui prendra en compte tous les filtres que vous avez placé dans votre requête.
Afin de récupérer tous les documents d'une collection, vous devez utiliser la méthode MongoCollection::find(). Cette méthode retourne un objet MongoCursor qui vous permet de parcourir tous les documents correspondant à votre requête. Aussi, pour récupérer tous les documents et les afficher, vous pouvez faire ceci :
<?php
$cursor = $collection->find();
foreach ($cursor as $id => $value) {
echo "$id: ";
var_dump( $value );
}
?>
Nous pouvons créer une requête à passer à la méthode find() pour récupérer un sous-jeu de documents de notre collection. Par exemple, si vous voulez trouver les documents dont le champ "i" vaut "71", vous pouvez le faire comme ceci :
<?php
$query = array( "i" => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
array(2) { ["_id"]=> object(MongoId)#6 (0) { } ["i"]=> int(71) ["_ns"]=> "testCollection" }
Vous pouvez utiliser une requête pour récupérer plusieurs documents depuis la collection. Par exemple, si vous voulez récupérer tous les documents dont le champ "i" est plus grand que 50, vous pouvez le faire comme ceci :
<?php
$query = array( "i" => array( '$gt' => 50 ) ); //notez les simples guillemets autour de '$gt'
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
<?php
$query = array( "i" => array( "\$gt" => 20, "\$lte" => 30 ) );
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
mongo.cmd = ":"
<?php
$query = array( "i" => array( ":gt" => 20, ":lte" => 30 ) );
?>
MongoDB supporte les indexes, et il est très simple de les ajouter à une collection. Pour créer un index, vous devez spécifier le champ qui doit être indexé, et spécifier si l'index doit être ascendant (1) ou descendant (-1). L'exemple suivant va créer un index ascendant sur le champ "i" :
<?php
$coll->ensureIndex( array( "i" => 1 ) ); // Création d'un index sur le champ "i"
$coll->ensureIndex( array( "i" => -1, "j" => 1 ) ); // Index descendant sur le champ "i", et ascendant sur le champ "j"
?>
Cet exemple établit une connexion, insère des objets, interroge des objets, parcours des résultats et se déconnecte de MongoDB.
<?php
// Connexion
$m = new Mongo();
// Sélectionne une base de données
$db = $m->comedy;
$collection = $db->cartoons;
// Ajoute un élément
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);
// Ajout un nouvel élément, avec un "shape" différent
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);
// Trouve n'importe quoi dans la collection
$cursor = $collection->find();
// Parcours les résultats
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
}
// Déconnexion
$m->close();
?>
Ceci affichera :
Calvin and Hobbes XKCD