MongoCollection: : aggregateCursor
(PECL mongo >=1.5.0)
MongoCollection::aggregateCursor — Exécute une commande d'agrégation, et récupère les résultats via un curseur
Description
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" => 4 ] ]
);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' => -1 ] ],
] );
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' => -1 ] ],
],
[ "cursor" => [ "batchSize" => 4 ] ]
);
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
- MongoDB::command() - Exécute une commande de base de données
- MongoCommandCursor
- MongoCommandCursor::batchSize() - Limite le nombre d'éléments retournés dans un lot
- MongoCollection::aggregate() - Effectue une agrégation en utilisant le framework dédié
- La documentation MongoDB sur l'» agrégation
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mongocollection.aggregatecursor.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.