Manuel
PHP Manual

Tutorial

Création d'une connexion

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

?>
Maintenant, la variable $connexion peut être utilisée pour atteindre la base de données.

Sélection d'une base de données

Pour sélectionner une base de données, utilisez :

<?php

$db 
$connection->dbname;

?>
La base de données n'a pas besoin d'avoir été créée auparavant ; vous pouvez simplement créer une nouvelle base de données en tentant de la sélectionner. Attention aux fautes de frappe ! Vous pouvez par inadvertance créer une nouvelle base de données, ce qui peut rendre plus compliqué de trouver la cause d'une erreur :
<?php

$db 
$connection->mybiglongdbname;
// Plus de codes ici...
$db $connection->mybiglongdbnme;
// Maintenant, vous êtes connecté à une base de données différente !

?>

Sélection d'une collection

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;

?>

Insertion d'un document

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")
);

?>
Notez que vous pouvez avoir des tableaux et des objets imbriqués. Les objets et les documents sont des synonymes en MongoDB : vous pouvez appeler $doc un document ou un objet, mais le champ "info" sera toujours un objet, jamais un document. Cette convention est utilisée pour toute la documentation.

Pour insérer ce document, utilisez la méthode MongoCollection::insert():

<?php

$m 
= new Mongo();
$collection $m->foo->bar;
$collection->insert$doc );

?>

Trouver un document en utilisant la méthode MongoCollection::findOne()

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 );

?>
et vous devriez voir :
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.

Ajout de plusieurs documents

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 );

?>
et nous pouvez le faire avec une simple boucle :
<?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".

Comptage des documents dans une collection

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();

?>
et vous devriez voir afficher : 101.

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.

Utilisation d'un curseur pour récupérer tous les documents

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 );
}

?>
ceci affichera les 101 documents de la collection. $id est le champ _id du document, et $value est le document lui-même.

Ajout d'un critère à une requête

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() );
}

?>
un seul document s'affichera :
array(2) {
  ["_id"]=>
  object(MongoId)#6 (0) {
  }
  ["i"]=>
  int(71)
  ["_ns"]=>
  "testCollection"
}

Récupération de plusieurs documents avec une requête

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() );
}

?>
Ceci devrait afficher les documents dont le champ "i" est supérieur à 50. Nous pouvons également spécifier un intervalle comme 20 < i <= 30 :
<?php

$query 
= array( "i" => array( "\$gt" => 20"\$lte" => 30 ) );
$cursor $coll->find$query );

while( 
$cursor->hasNext() ) {
    
var_dump$cursor->getNext() );
}

?>
Vu qu'il est facile d'oublier d'échapper le "$", vous pouvez aussi choisir votre propre caractère spécial à utiliser à la place de '$'. Choisissez un caractère qui n'apparait pas dans les noms des clés, i.e. ":" et ajoutez la ligne suivante à votre fichier php.ini :
mongo.cmd = ":"
Ainsi, l'exemple ci-dessus deviendra :
<?php

$query 
= array( "i" => array( ":gt" => 20":lte" => 30 ) );

?>
Vous pouvez également le changer dans votre code en utilisant la commande ini_set("mongo.cmd", ":"). Bien sûr, vous pouvez également utiliser des simples guillements autour de $.

Création d'un index

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" => ) );  // Création d'un index sur le champ "i"
$coll->ensureIndex( array( "i" => -1"j" => ) );  // Index descendant sur le champ "i", et ascendant sur le champ "j"

?>

Rapide exemple

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

Manuel
PHP Manual