La clase MongoDBRef

(PECL mongo >=0.9.0)

Advertencia

Esta extensión que define esta clase está obsoleta. En su lugar debe usarse la extensión MongoDB. No existe un equivalente para esta clase en la nueva extensión.

El concepto de referencias de bases de datos, y por consiguiente esta clase, están obsoletos en la base de datos.

Introducción

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.

Sinopsis de la Clase

MongoDBRef {
/* Métodos */
public static create ( string $collection , mixed $id [, string $database ] ) : array
public static get ( MongoDB $db , array $ref ) : array
public static isRef ( mixed $ref ) : bool
}

Ver también

Documentación de MongoDB sobre » referencias a bases de datos.

Tabla de contenidos

add a note add a note

User Contributed Notes 1 note

up
0
jaimz at vertigolabs dot org
11 years ago
While you can create a DBRef object for a GridFS document, you CAN NOT load a document from GridFS using a DBRef.

This is dependent on the driver, not MongoDB.
To Top