MongoCursor::addOption

(PECL mongo >=1.0.4)

MongoCursor::addOptionДобавляет пару ключ/значение верхнего уровня в запрос

Описание

public MongoCursor::addOption ( string $key , mixed $value ) : MongoCursor

Это расширенная функция, и ее нельзя использовать, если вы не знаете, что делаете.

Запрос может быть дополнительно вложен в поле "query", если заданы другие параметры, такие как сортировка или подсказка. Например, добавление сортировки приведет к тому, что запрос становится подполем более крупного объекта запроса, например:

<?php

$query 
= array("query" => $query"orderby" => $sort);

?>

Этот метод предназначен для добавления поля верхнего уровня в запрос. Это делает запрос подобъектом (если это еще не сделано) и добавляет пару ключ/значение по вашему выбору на верхний уровень.

Внимание

Его нельзя использовать для добавления дополнительных критериев к запросу на лету. Например, это не будет работать:

<?php

// НЕ ПРАВИЛЬНО
$cursor $users->find()->addOption("name""joe")->addOption("age"20);

?>
Это не запрашивает пользователя с именем "joe" в возрасте 20 лет.

Список параметров

key

Имя поля для добавления.

value

Значение для добавления.

Возвращаемые значения

Возвращает курсор.

Ошибки

Выдает исключение MongoCursorException, если этот курсор начал итерацию.

Примеры

Пример #1 Пример использования MongoCursor::addOption() для добавления комментария

MongoDB поддерживает специальные опции для отправки на сервер. Оболочка использует опцию _addSpecial для отправки $comment на сервер. Этот комментарий будет отображаться в журнале профилирования (например, для медленных запросов). В драйвере PHP вы используете метод MongoCursor::addOption().

<?php
$m 
= new MongoClient;
$c $m->demo->demo;
$cursor $c->find();
$cursor->addOption('$comment'"Этот комментарий будет отображаться в журнале профилирования");

foreach (
$cursor as $document) { /* пусто */ }
?>

Результатом выполнения данного примера будет что-то подобное:

{
    "op" : "query",
    "ns" : "demo.demo",
    "query" : {
        "$query" : {
             
        },
        "$comment" : "Этот комментарий будет отображаться в журнале профилирования"
    },
    "cursorid" : 168463566447,
    "ntoreturn" : 0,
    "ntoskip" : 0,
    "nscanned" : 101,
    "nscannedObjects" : 101,
    "keyUpdates" : 0,
    "numYield" : 0,
…

Пример #2 Пример использования MongoCursor::addOption()

Использование MongoCursor::skip() для пропуска миллионов результатов может стать медленным. Одним из способов решения этой проблемы является использование параметров $min или $max для запроса. Это может быть удобно, но для них требуется указатель именно на искомые поля. Это пример того, как использовать $min в качестве альтернативы MongoCursor::skip().

<?php

// убедитесь, что у нас есть индекс
$c->ensureIndex(array("ts" => 1));

// вам, возможно, придется изменить это, чтобы запускаться
// в разумные сроки на медленных машинах (на хорошей машине это может занять около 30 секунд)
for ($i 0$i 30000000$i++) {
    
$c->insert(array("ts" => new MongoDate(), "i" => $i));
}

$now strtotime("now");

// найти документы, вставленные за последние 2 секунды
$cursor $c->find()->addOption('$min', array("ts" => $now-2));

?>