MongoCollection::aggregateCursor

(PECL mongo >=1.5.0)

MongoCollection::aggregateCursorExecute an aggregation pipeline command and retrieve results through a cursor

Description

public MongoCommandCursor MongoCollection::aggregateCursor ( array $command [, array $options ] )

With this method you can execute Aggregation Framework pipelines and retrieve the results through a cursor, instead of getting just one document back as you would with MongoCollection::aggregate(). This method returns a MongoCommandCursor object. This cursor object implements the Iterator interface just like the MongoCursor objects that are returned by the MongoCollection::find() method.

Parameters

pipeline

The Aggregation Framework pipeline to execute.

options

Options for the aggregation command. Valid options include:

  • "allowDiskUse"

    Allow aggregation stages to write to temporary files

  • "cursor"

    It is possible to configure how many initial documents the server should return with the first result set. The default initial batch size is 101. You can change it by adding the batchSize option:

    <?php
    $collection
    ->aggregateCursor
        
    $pipeline,
        [ 
    "cursor" => [ "batchSize" => ] ]
    );

    This option only configures the size of the first batch. To configure the size of future batches, please use the MongoCommandCursor::batchSize() method on the returned MongoCommandCursor object.

  • "explain"

    Return information on the processing of the pipeline. If you need to use this option, you should consider using MongoCollection::aggregate().

  • "maxTimeMS"

    Specifies a cumulative time limit in milliseconds for processing the operation (does not include idle time). If the operation is not completed within the timeout period, a MongoExecutionTimeoutException will be thrown.

Return Values

Returns a MongoCommandCursor object. Because this implements the Iterator interface you can iterate over each of the results as returned by the command query. The MongoCommandCursor also implements the MongoCursorInterface interface which adds the MongoCommandCursor::batchSize(), MongoCommandCursor::dead(), MongoCommandCursor::info() methods.

Examples

Example #1 MongoCollection::aggregateCursor() example

Finding all of the distinct values for a key.

<?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' => -] ],
] );

foreach (
$ages as $person) {
    echo 
"{$person['_id']}{$person['points']}\n";
}

?>

The above example will output something similar to:


Molly: 130
Joe: 26
Sally: 22

Example #2 MongoCollection::aggregateCursor() example with different initial batch size

Finding all of the distinct values for a key.

<?php
$m 
= new MongoClient;
$db $m->test;
$people $db->people;
$people->drop();

/* Insert some sample data */
$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));

/* Run the command cursor */
$ages $people->aggregateCursor(
    [
        [ 
'$group' => [ '_id' => '$name''points' => [ '$sum' => '$points' ] ] ],
        [ 
'$sort' => [ 'points' => -] ],
    ],
    [ 
"cursor" => [ "batchSize" => ] ]
);

foreach (
$ages as $person) {
    echo 
"{$person['_id']}{$person['points']}\n";
}

?>

The above example will output something similar to:


Molly: 130
Joe: 26
Sally: 22

See Also

Коментарии

It looks like maxTimeMS option in the latest release (1.5.8) is not valid anymore. Set \MongoCursor::$timeout before you call aggregateCursor()
2015-01-19 21:08:56
http://php5.kiev.ua/manual/ru/mongocollection.aggregatecursor.html
Автор:
aggregateCursor with mongoDB 3.6 can cause error:
"the command cursor did not return a correctly structured response"

to fix it on 64 bit systems, temporarily turn on:
ini_set('mongo.long_as_object', true);
2017-12-20 13:18:55
http://php5.kiev.ua/manual/ru/mongocollection.aggregatecursor.html

    Поддержать сайт на родительском проекте КГБ