先ほどの例で追加したドキュメントを表示するには、 シンプルに MongoCollection::findOne() を実行してコレクションからドキュメントをひとつ取得します。 このメソッドは、クエリにマッチするドキュメントがひとつだけしかないときや 一件の結果にだけしか興味がない場合に便利です。
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$document = $collection->findOne();
var_dump( $document );
?>
上の例の出力は以下となります。
array(6) { ["_id"]=> object(MongoId)#8 (1) { ["$id"]=> string(24) "4e2995576803fab768000000" } ["name"]=> string(7) "MongoDB" ["type"]=> string(8) "database" ["count"]=> int(1) ["info"]=> array(2) { ["x"]=> int(203) ["y"]=> int(102) } ["versions"]=> array(3) { [0]=> string(5) "0.9.7" [1]=> string(5) "0.9.8" [2]=> string(5) "0.9.9" } }
_id フィールドが 自動的にドキュメントに追加されていることに注目しましょう。 _id は、いわゆる「主キー」フィールドです。 ドキュメントにキーがなければ、ドライバが自動的に追加します。
自前で _id フィールドを指定する場合は、 コレクション内で一意になるようにしなければなりません。 例をごらんください。
<?php
$connection = new MongoClient();
$db = $connection->database;
$db->foo->insert(array("_id" => 1));
// これは例外が発生します
$db->foo->insert(array("_id" => 1));
// こちらは別のコレクションなので大丈夫です
$db->bar->insert(array("_id" => 1));
?>
ドライバはデフォルトで、サーバーが書き込みを受け付けてから結果を返すことを保証します。 オプションでこの挙動をオフにすることもできます。その場合は、 array("w" => 0) を二番目の引数で渡します。 これは、データベース側での書き込み完了をドライバに待たせないことを意味します。 つまり、_id が重複していてもドライバは例外をスローしません。
MongoCollection::findOne() に、 データの検索に関する詳細な情報があります。
MongoId には、一意な ID に関する詳細な説明があります。
書き込みのページでは、 安全な書き込みについてより詳しく扱っています。 また 書き込み確認 では、さまざまな Write Concern オプションについて解説します。