(PECL mongo >=0.9.0)
Cette classe sert à créer des liens légers entre des objets de différentes colllections.
Motivation : Supposez que vous voulez lier un document dans une autre collection. La façon la plus facile est de créer un champ dans le document courant. Par exemple, si vous avez une collection "people" et une collection "addresses", vous devriez vouloir créer un lien entre chaque document d'une personne et chaque document d'adresses :
Exemple #1 Liage des documents
<?php
$people = $db->people;
$addresses = $db->addresses;
$myAddress = array("line 1" => "123 Main Street",
"line 2" => null,
"city" => "Springfield",
"state" => "Vermont",
"country" => "USA");
// Sauvegarde de l'adresse
$addresses->insert($myAddress);
// Sauvegarde une personne avec une référence vers l'adresse
$me = array("name" => "Fred", "address" => $myAddress['_id']);
$people->insert($me);
?>
Par la suite, vous pouver retrouver l'adresse d'une personne en interrogeant la collection "addresses" avec un MongoId sauvegardé dans la collection "people".
Supposez maintenant que vous avez un cas plus général, où vous ne savez pas quelle collection (ou bien quelle base de données) contient le document référencé. La classe MongoDBRef est un bon choix dans ce cas, vu qu'elle a un format commun que tous les drivers et bases de données comprennent.
Si chaque personne a une liste de choses qu'elles aiment, pouvant venir de plusieurs collections, comme des "hobbies", "sports", "books", etc., vous pouvez utiliser la classe MongoDBRef pour garder une trace des collections fournissant ces choses :
Exemple #2 Création de lien MongoDBRef
<?php
$people = $db->selectCollection("people");
// Les modèles de train sont dans la collection "hobbies"
$trainRef = MongoDBRef::create("hobbies", $modelTrains['_id']);
// Le foot dans la collection "sports"
$soccerRef = MongoDBRef::create("sports", $soccer['_id']);
// Maintenant, vous connaissez la collection dont les éléments du tableau "likes"
// proviennent, au moment où vous souhaitez récupérer les documents associés
$people->insert(array("name" => "Fred", "likes" => array($trainRef, $soccerRef)));
?>
On peut représenter les références des bases de données comme des liens: elles donnent l'adresse unique d'un document, mais elles ne le chargent pas et ne suivent pas les lien/référence automatiquement.
Une référence de base de données est juste un tableau associatif, pas une instance de MongoDBRef, cette classe est donc un peu différente des autres classes de tyes de données, elle ne contient que des méthodes statiques pour manipuler les références de bases de données.
Documentation de MongoDB » concernant les références de bases de données.