SunshinePHP 2020

MongoDBRef クラス

(PECL mongo >=0.9.0)

警告

このクラスを定義している拡張モジュールは非推奨です。 かわりに MongoDB 拡張モジュールを使うべきです。 このクラスの代替は、新しい拡張モジュールには存在しません。

The concept of database references, and hence this class, has been deprecated in the database.

はじめに

このクラスを使用して、別々のコレクション内にあるオブジェクト間の軽量なリンクを作成します。

動機: 別のコレクションにあるドキュメントを参照する必要が出てきたとしましょう。 いちばん簡単な方法は、現在のドキュメントにフィールドを作ることです。 たとえば、"people" コレクションと "addresses" コレクションがあるときに 人物のドキュメントと住所のドキュメントをリンクさせたいことがあるでしょう。

例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);

?>

そうすれば、誰かの住所を知りたくなったときには、 "people" コレクションに保存した MongoId を使って "addresses" コレクションを検索することができます。

もう少し一般化してみましょう。参照したいドキュメントがどのコレクション (あるいはどのデータベース) にあるかわからない場合です。こんな場合に 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 コアドキュメントの » データベース参照 を参照ください。

目次

add a note add a note

User Contributed Notes 1 note

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