PHP 5.4.36 Released

La classe MongoDBRef

(PECL mongo >=0.9.0)

Introduction

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.

Synopsis de la classe

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

Voir aussi

Documentation de MongoDB » concernant les références de bases de données.

Sommaire

add a note add a note

User Contributed Notes 1 note

up
0
jaimz at vertigolabs dot org
1 year 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