MongoCollection::aggregateCursor
(PECL mongo >=1.5.0)
MongoCollection::aggregateCursor — Выполняет команду конвейера агрегации и получает результаты с помощью курсора
Описание
$command
, array $options
= ?
) : MongoCommandCursorС помощью этого метода вы можете выполнять конвейеры структуры агрегации и получать результаты с помощью курсора, вместо того, чтобы возвращать только один документ, как это было бы с MongoCollection::aggregate(). Этот метод возвращает объект MongoCommandCursor. Этот объект курсора реализует интерфейс Iterator точно так же, как объекты MongoCursor, которые возвращаются методом MongoCollection::find().
Замечание: Результирующий MongoCommandCursor будет наследовать предпочтения чтения этой коллекции. MongoCommandCursor::setReadPreference() может использоваться для изменения предпочтения чтения перед итерацией курсора.
Список параметров
-
pipeline
-
Конвейер структуры агрегации для выполнения.
-
options
-
Опции для команды агрегации. Допустимые варианты:
-
"allowDiskUse"
Разрешить этапы агрегации для записи во временные файлы
-
"cursor"
Можно настроить, сколько исходных документов сервер должен вернуть с первым набором результатов. Начальный размер пакета по умолчанию -
101
. Вы можете изменить его, добавив параметрbatchSize
:<?php
$collection->aggregateCursor(
$pipeline,
[ "cursor" => [ "batchSize" => 4 ] ]
);Эта опция только настраивает размер первого пакета. Чтобы настроить размер будущих пакетов, используйте метод MongoCommandCursor::batchSize() в возвращенном объекте MongoCommandCursor.
-
"explain"
Вернуть информацию об обработке конвейера. Эта опция может привести к тому, что команда вернет результирующий документ, который не подходит для создания MongoCommandCursor. Если вам нужно использовать эту опцию, вы должны рассмотреть возможность использования MongoCollection::aggregate().
"maxTimeMS"
Указывает суммарный лимит времени в миллисекундах на обработку операции (не включая время простоя) на сервере. Если операция на стороне сервера не завершилась за это время, то вызывается исключение MongoExecutionTimeoutException.
-
Возвращаемые значения
Возвращает объект MongoCommandCursor. Поскольку он реализует интерфейс Iterator, вы можете перебирать каждый из результатов, возвращаемых запросом команды. MongoCommandCursor также реализует интерфейс MongoCursorInterface, который добавляет методы MongoCommandCursor::batchSize(), MongoCommandCursor::dead(), MongoCommandCursor::info().
Примеры
Пример #1 Пример использования MongoCollection::aggregateCursor()
Поиск всех различных значений для ключа.
<?php
$m = new MongoClient;
$db = $m->test;
$people = $db->people;
$people->drop();
$people->insert(array("name" => "Joe", "points" => 4));
$people->insert(array("name" => "Molly", "points" => 43));
$people->insert(array("name" => "Sally", "points" => 22));
$people->insert(array("name" => "Joe", "points" => 22));
$people->insert(array("name" => "Molly", "points" => 87));
$ages = $people->aggregateCursor( [
[ '$group' => [ '_id' => '$name', 'points' => [ '$sum' => '$points' ] ] ],
[ '$sort' => [ 'points' => -1 ] ],
] );
foreach ($ages as $person) {
echo "{$person['_id']}: {$person['points']}\n";
}
?>
Результатом выполнения данного примера будет что-то подобное:
Molly: 130
Joe: 26
Sally: 22
Пример #2 Пример использования MongoCollection::aggregateCursor() с другим начальным размером пакета
Поиск всех различных значений для ключа.
<?php
$m = new MongoClient;
$db = $m->test;
$people = $db->people;
$people->drop();
/* Вставьте пример данных */
$people->insert(array("name" => "Joe", "points" => 4));
$people->insert(array("name" => "Molly", "points" => 43));
$people->insert(array("name" => "Sally", "points" => 22));
$people->insert(array("name" => "Joe", "points" => 22));
$people->insert(array("name" => "Molly", "points" => 87));
/* Запустите командный курсор */
$ages = $people->aggregateCursor(
[
[ '$group' => [ '_id' => '$name', 'points' => [ '$sum' => '$points' ] ] ],
[ '$sort' => [ 'points' => -1 ] ],
],
[ "cursor" => [ "batchSize" => 4 ] ]
);
foreach ($ages as $person) {
echo "{$person['_id']}: {$person['points']}\n";
}
?>
Результатом выполнения данного примера будет что-то подобное:
Molly: 130
Joe: 26
Sally: 22
Смотрите также
- MongoDB::command() - Выполняет команду базы данных
- MongoCommandCursor
- MongoCommandCursor::batchSize() - Ограничивает количество элементов, возвращаемых в одном пакете
- MongoCollection::aggregate() - Выполняет агрегацию с использованием структуры агрегации
- » Структура агрегации MongoDB