(PECL mongo >=0.9.0)
Esta clase puede usarse para crear enlaces ligeros entre objetos de diferencias colecciones.
Motivación: Supongamos que necesitamos referirnos a un documento en otra colección. La forma más fácil es crear un nuevo campo en el documento actual. Por ejemplo, si tenemos una colección "personas" y una colección "direcciones", quizás queramos crear un enlace entre cada documento de persona y un documento de dirección:
Ejemplo #1 Vincular documentos
<?php
$personas = $db->personas;
$direcciones = $db->direcciones;
$miDireccion = array("linea 1" => "Calle Mayor, 123",
"linea 2" => null,
"ciudad" => "Springfield",
"estado" => "Vermont",
"pais" => "USA");
// guardamos la direccion
$direcciones->insert($miDireccion);
// guardar una persona con una referencia a la direccion
$yo = array("nombre" => "Fred", "direccion" => $miDireccion['_id']);
$personas->insert($yo);
?>
Posteriormente podremos encontrar la dirección de la persona consultando la colección "direcciones" con el MongoId que almacenamos en la colección "personas".
Supongamos ahora que tenemos un caso más general, donde no sabemos qué colección (o incluso qué base de datos) contiene el documento referenciado. MongoDBRef es una buena elección para estos casos, ya que es un formato común que todos los drivers y bases de datos podrán interpretar.
Si cada persona tuviera una lista de cosas que les gusta, y éstas pudieran venir a partir de varias colecciones, como "hobbies", "deportes", "libros", etc., podríamos usar MongoDBRef para seguir la pista de con qué colección se asocia cada gusto:
Ejemplo #2 Crear vínculos MongoDBRef
<?php
$personas = $db->selectCollection("personas");
// modelismo ferroviario está en la colección "hobbies"
$ferroRef = MongoDBRef::create("hobbies", $modelismoFerroviario['_id']);
// fútbol está en la colección "deportes"
$futbolRef = MongoDBRef::create("deportes", $futbol['_id']);
// ahora, cuando consultemos el documento, sabremos a qué colección
// pertenecen cada ítem de "gustos"
$personas->insert(array("nombre" => "Fred", "gustos" => array($ferroRef, $futbolRef)));
?>
Las referencias a bases de datos se pueden concebir como hipervínculos: proporcionan una dirección única a otro documento, pero no cargan ni redirigen automáticamente al enlace/referencia.
Una referencia a una base de datos es un array asociativo, no una instancia de MongoDBRef, de modo que esta clase es ligeramente diferente al resto de clases de tipos de datos. Esta clase contiene únicamente métodos estáticos para poder manipular las referencias a bases de datos.
Documentación de MongoDB sobre » referencias a bases de datos.