MongoCollection::find
(PECL mongo >=0.9.0)
MongoCollection::find — Запрашивает коллекцию, возвращая 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 в качестве ключей).
Смотрите также
- MongoCollection::findOne() - Запрашивает коллекцию, возвращая единственный элемент
- MongoCollection::insert() - Вставляет документ в коллекцию
- Основные документы MongoDB по » поиску.