Поиск документов с помощью MongoCollection::findOne()
Чтобы показать, что документ, который мы вставили на предыдущем шаге, хранится в базе данных, мы можем выполнить простую операцию 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 более подробно описывает уникальные идентификаторы.
Раздел записи описывает более детальную запись, а в главе Гарантии записи подробно рассматриваются различные параметры записи.