(PECL mongo >=0.9.0)
MongoCollection::find — Запрашивает коллекцию, возвращая MongoCursor для набора результатов
$query
= array()
[, array $fields
= array()
]] ) : MongoCursor
query
Поля для поиска. Язык запросов MongoDB довольно обширный. Драйвер PHP почти во всех случаях передает запрос напрямую на сервер, поэтому чтение основных документов MongoDB в » find - хорошая идея.
Пожалуйста, убедитесь, что для всех специальных операторов запросов (начиная с $) вы используете одинарные кавычки, чтобы PHP не пытался заменить "$exists" значением переменной $exists.
fields
Поля результатов для возврата. Массив находится в формате array('fieldname' => true, 'fieldname2' => true). Поле _id всегда возвращается.
Возвращает курсор для результатов поиска.
Пример #1 Пример использования MongoCollection::find()
Этот пример демонстрирует основные параметры поиска.
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'produce');
// поиск фруктов
$fruitQuery = array('Type' => 'Fruit');
$cursor = $collection->find($fruitQuery);
foreach ($cursor as $doc) {
var_dump($doc);
}
// поиск сладкой продукции. Taste - дочерний элемент Details.
$sweetQuery = array('Details.Taste' => 'Sweet');
echo "Sweet\n";
$cursor = $collection->find($sweetQuery);
foreach ($cursor as $doc) {
var_dump($doc);
}
?>
Результат выполнения данного примера:
array(4) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "50a87dd084f045a19b220dd6" } ["Name"]=> string(5) "Apple" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(5) "Sweet" ["Colour"]=> string(3) "Red" } } array(4) { ["_id"]=> object(MongoId)#8 (1) { ["$id"]=> string(24) "50a87de084f045a19b220dd7" } ["Name"]=> string(5) "Lemon" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(4) "Sour" ["Colour"]=> string(5) "Green" } } Sweet: array(4) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "50a87dd084f045a19b220dd6" } ["Name"]=> string(5) "Apple" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(5) "Sweet" ["Colour"]=> string(3) "Red" } }
Смотрите MongoCursor для получения дополнительной информации, как работать с курсорами.
Пример #2 Пример использования MongoCollection::find()
Этот пример демонстрирует, как искать диапазон.
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');
// поиск документов где 5 < x <20
$rangeQuery = array('x' => array( '$gt' => 5, '$lt' => 20 ));
$cursor = $collection->find($rangeQuery);
foreach ($cursor as $doc) {
var_dump($doc);
}
?>
Результат выполнения данного примера:
array(2) { ["_id"]=> object(MongoId)#10 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000000" } ["x"]=> int(12) } array(2) { ["_id"]=> object(MongoId)#11 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000001" } ["x"]=> int(12) }
Смотрите MongoCursor для получения дополнительной информации, как работать с курсорами.
Пример #3 Пример использования MongoCollection::find() совместно с $where
Этот пример демонстрирует, как искать коллекцию, используя код JavaScript, чтобы уменьшить набор результатов.
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');
$js = "function() {
return this.name == 'Joe' || this.age == 50;
}";
$cursor = $collection->find(array('$where' => $js));
foreach ($cursor as $doc) {
var_dump($doc);
}
?>
Результат выполнения данного примера:
array(3) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) }
Пример #4 Пример использования MongoCollection::find() совместно с $in
В этом примере показано, как искать коллекцию с помощью оператора $in.
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');
$cursor = $collection->find(array(
'name' => array('$in' => array('Joe', 'Wendy'))
));
?>
Результат выполнения данного примера:
array(3) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) }
Пример #5 Получение результатов в виде массива
Возвращает MongoCursor. Часто, когда люди только начинают, им удобнее использовать массив. Чтобы превратить курсор в массив, используйте функцию iterator_to_array().
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');
$cursor = $collection->find();
$array = iterator_to_array($cursor);
?>
Результат выполнения данного примера:
array(3) { ["4ebc40af10b89f5149000000"]=> array(2) { ["_id"]=> object(MongoId)#6 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000000" } ["x"]=> int(12) } ["4ebc40af10b89f5149000001"]=> array(2) { ["_id"]=> object(MongoId)#11 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000001" } ["x"]=> int(12) } ["4ebc40af10b89f5149000002"]=> array(3) { ["_id"]=> object(MongoId)#12 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) } }
Использование iterator_to_array() заставляет драйвер загружать все результаты в память, поэтому не делайте этого для наборов результатов, которые больше веделенной памяти!
Кроме того, некоторые системные коллекции не имеют поля _id.
Если вы имеете дело с коллекцией, в которой могут быть документы без _id,
передайте FALSE
в качестве второго аргумента iterator_to_array()
(чтобы он не пытался использовать несуществующие значения _id в качестве ключей).