PHP 7.4.0RC6 Released!

MongoCollection::aggregateCursor

(PECL mongo >=1.5.0)

MongoCollection::aggregateCursorExécute une commande d'agrégation, et récupère les résultats via un curseur

Description

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

Avec cette méthode, vous pouvez exécuter des commandes d'agrégation et récupérer les résultats via un curseur, au lieu de ne récupérer qu'un seul document, comme c'est le cas avec la méthode MongoCollection::aggregate(). Cette méthode retourne un objet MongoCommandCursor. Cet objet de type curseur implémente l'interface Iterator tout comme les objets MongoCursor qui sont retournés par la méthode MongoCollection::find().

Note: Le MongoCommandCursor résultant va hériter des préférences de lecture de cette collection. MongoCommandCursor::setReadPreference() peut être utilisé pour modifier les préférences de lecture, avant d'avancer sur le curseur.

Liste de paramètres

pipeline

La commande d'agrégation à exécuter.

options

Options pour la commande d'agrégation. Les options valides sont :

  • "allowDiskUse"

    Autorise les étapes d'agrégation d'écrire dans des fichiers temporaires

  • "cursor"

    Il est possible de configurer le nombre de documents initiaux que le serveur doit retourner avec le premier jeux de résultats. La taille du lot initial par défaut est 101. Vous pouvez la modifier en ajoutant l'option batchSize :

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

    Cette option configure uniquement la taille du premier lot. Pour configurer la taille des lots suivants, utilisez la méthode MongoCommandCursor::batchSize() sur l'objet MongoCommandCursor retourné.

  • "explain"

    Retourne des informations sur l'exécution de la commande. Cette option peut faire que la commande va retourner un document résultat qui ne sera pas utilisable pour la construction d'un MongoCommandCursor. Si vous devez utiliser cette option, vous pourriez considérer l'utilisation de la méthode MongoCollection::aggregate().

  • "maxTimeMS"

    Spécifie une limite cumulative de temps, en millisecondes, pour procéder à l'opération (n'inclut pas le temps d'inactivité). Si l'opération n'est pas terminée durant cette période, une exception MongoExecutionTimeoutException sera émise.

Valeurs de retour

Retourne un objet MongoCommandCursor. En raison du fait que l'objet implémente l'interface Iterator, vous pouvez parcourir le jeux de résultats tel que retourné par la requête de commande. MongoCommandCursor implémente également l'interface MongoCursorInterface qui ajoute les méthodes MongoCommandCursor::batchSize(), MongoCommandCursor::dead() et MongoCommandCursor::info().

Exemples

Exemple #1 Exemple avec MongoCollection::aggregateCursor()

Trouve toutes les valeurs distinctes pour une clé.

<?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";
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


Molly: 130
Joe: 26
Sally: 22

Exemple #2 Exemple avec MongoCollection::aggregateCursor() avec différentes tailles de lots initiaux

Trouve toutes les valeurs distinctes pour une clé.

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

/* Insertion de données */
$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));

/* Exécuter la commande */
$ages $people->aggregateCursor(
    [
        [ 
'$group' => [ '_id' => '$name''points' => [ '$sum' => '$points' ] ] ],
        [ 
'$sort' => [ 'points' => -] ],
    ],
    [ 
"cursor" => [ "batchSize" => ] ]
);

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

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


Molly: 130
Joe: 26
Sally: 22

Voir aussi

add a note add a note

User Contributed Notes 2 notes

up
3
Dmitriy
1 year ago
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);
up
1
lukasz at endai dot com
4 years ago
It looks like maxTimeMS option in the latest release (1.5.8) is not valid anymore. Set \MongoCursor::$timeout before you call aggregateCursor()
To Top