Класс MongoDBRef

(PECL mongo >=0.9.0)

Внимание

Расширение, задающее этот класс, объявлено устаревшим. Вместо него используйте расширение MongoDB. Никакой замены данному классу не предусмотрено.

Концепция ссылок на базу данных, а следовательно и данный класс, являются устаревшими.

Введение

Этот класс может быть использован для создания простых связей между объектами разных коллекций.

Основание: Предположим, что нам нужно сослаться на документ из другой коллекции. Самый простой способ - создать специальное поле в текущем документе. Например, если у нас есть коллекции людей и адресов, мы можем создать связь между документом адреса и документом человека:

Пример #1 Связывание документов

<?php

$people 
$db->people;
$addresses $db->addresses;

$myAddress = array("line 1" => "123 Main Street",
    
"line 2" => null,
    
"city" => "Springfield",
    
"state" => "Vermont",
    
"country" => "USA");

// сохраняем адрес
$addresses->insert($myAddress);

// сохраняем человека со ссылкой на адрес
$me = array("name" => "Fred""address" => $myAddress['_id']);
$people->insert($me);

?>

Позже мы можем найти адрес человека с помощью запроса в коллекцию адресов с использованием MongoId который мы сохранили в коллекции людей.

Теперь предположим, что мы имеем более общий случай, когда не известно какая коллекция (или даже база данных) содержит указанный документ. MongoDBRef является хорошим выбором в такой ситуации, так как это общий формат, который понимают все драйверы и базы данных.

Если каждый человек имеет список понравившихся вещей и все они находятся в разных коллекциях, таких как: "hobbies", "sports", "books", и т.д., мы можем использовать MongoDBRef для отслеживания того, что и из какой коллекции "лайкнул" человек:

Пример #2 Создание MongoDBRef связи

<?php

$people 
$db->selectCollection("people");

// модель поезда в коллекции "hobbies"
$trainRef MongoDBRef::create("hobbies"$modelTrains['_id']);
// футбол в "sports" коллекции
$soccerRef MongoDBRef::create("sports"$soccer['_id']);

//теперь мы знаем, какие коллекции элементов в массиве "likes" придут, когда
// мы будем извлекать этот документ
$people->insert(array("name" => "Fred""likes" => array($trainRef$soccerRef)));

?>

Ссылки в базе данных можно рассматривать как гиперссылки: он предоставляет уникальный адрес другого документа, но не загружает его автоматически и не переходит по этим ссылкам.

Ссылки в базе данных это обычный ассоциативный массив, не экземплр MongoDBRef, поэтому этот класс немного оличается от других классов типов данных. Этот класс содержит только ститические методы для манипуляции ссылками базы данных.

Обзор классов

MongoDBRef {
/* Методы */
public static create ( string $collection , mixed $id [, string $database ] ) : array
public static get ( MongoDB $db , array $ref ) : array
public static isRef ( mixed $ref ) : bool
}

Смотрите также

Базовая документация на MongoDB лежит тут » databases references.

Содержание

  • MongoDBRef::create — Создает новую ссылку в базе данных
  • MongoDBRef::get — Извлекает объект, на который указывает ссылка
  • MongoDBRef::isRef — Проверяет, что массив является ссылкой
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