MongoCollection::find

(PECL mongo >=0.9.0)

MongoCollection::findЗапрашивает коллекцию, возвращая MongoCursor для набора результатов

Описание

public MongoCollection::find ([ array $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 в качестве ключей).

Смотрите также