このクラスを使用して、別々のコレクション内にあるオブジェクト間の軽量なリンクを作成します。
動機: 別のコレクションにあるドキュメントを参照する必要が出てきたとしましょう。 いちばん簡単な方法は、現在のドキュメントにフィールドを作ることです。 たとえば、"people" コレクションと "addresses" コレクションがあるときに 人物のドキュメントと住所のドキュメントをリンクさせたいことがあるでしょう。
<?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 を使えば、それぞれがどのコレクションからのものかを管理できます。
<?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 のインスタンスではありません。 そのため、このクラスは他のデータ型クラスとは多少異なります。 このクラスに含まれているのは、 データベース参照を操作するための静的メソッドだけです。
MongoDB コアドキュメントの » データベース参照 を参照ください。