先ほどの例で追加したドキュメントを表示するには、 シンプルに 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 オプションについて解説します。