MongoCursor::addOption
(PECL mongo >=1.0.4)
MongoCursor::addOption — Ajoute une paire clé/valeur de haut niveau à la requête
Description
Cette méthode est une méthode avancée et ne devrait pas être utiliser sans vraiment savoir ce que vous en faîtes.
Une requête peut optionnellement être imbriquée dans un champ "query" si les autres options, comme un tri ou un indice sont fournies. Actuellement, l'ajout d'un tri fait que la requête devient un sous-champ d'un objet requête plus gros, comme ceci :
<?php
$query = array("query" => $query, "orderby" => $sort);
?>
Cette méthode permet d'ajouter un champ de haut niveau à une requête. Elle rend une requête un sous-objet (si elle ne l'est pas déjà) et ajoute une paire clé/valeur de votre choix en haut niveau.
Elle ne peut être utilisée pour ajouter d'autres critères pour une requête à la volée. Actuellement, ceci ne fonctionne pas :
<?php
// INCORRECT !
$cursor = $users->find()->addOption("name", "joe")->addOption("age", 20);
?>
Erreurs / Exceptions
Lance une exception MongoCursorException si ce curseur a commencé à être parcouru.
Exemples
Exemple #1 Exemple de l'ajout d'un commentaire avec MongoCursor::addOption()
MongoDB supporte des options spéciales à envoyer au serveur. Le shell utilise l'option _addSpecial pour envoyer un $comment au server. Ce commentaire sera affiché dans les logs de profilage (i.e. pour les requêtes lentes). Dans le driver PHP, vous utilisez la méthode MongoCursor::addOption().
<?php
$m = new MongoClient;
$c = $m->demo->demo;
$cursor = $c->find();
$cursor->addOption('$comment', "Ce commentaire sera affiché dans les logs de profilage");
foreach ($cursor as $document) { /* vide */ }
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
{ "op" : "query", "ns" : "demo.demo", "query" : { "$query" : { }, "$comment" : "Ce commentaire sera affiché dans les logs de profilage" }, "cursorid" : 168463566447, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 101, "nscannedObjects" : 101, "keyUpdates" : 0, "numYield" : 0, …
Exemple #2 Exemple avec MongoCursor::addOption()
L'utilisation de la méthode MongoCursor::skip() pour éviter plusieurs millions de résultats peut être lent. Pour éviter de rencontrer ce problème, vous pouvez utiliser les options $min ou $max de votre requête. Ceci peut paraître simple mais encore faut-il un index sur le champ exact sur lequel on effectue la recherche. Voici un exemple d'utilisation de l'option $min comme alternative à la méthode MongoCursor::skip().
<?php
// Assurons-nous que l'index est présent
$c->ensureIndex(array("ts" => 1));
// vous devriez modifier ceci afin que l'exécution s'effectue en un
// temps raisonnable sur des machines lentes (prend environ 30 secondes
// sur une bonne machine)
for ($i = 0; $i < 30000000; $i++) {
$c->insert(array("ts" => new MongoDate(), "i" => $i));
}
$now = strtotime("now");
// Trouve les documents insérés dans les 2 dernières secondes
$cursor = $c->find()->addOption('$min', array("ts" => $now-2));
?>
Version en cache
10/01/2025 21:33:25 Cette version de la page est en cache (à la date du 10/01/2025 21:33:25) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mongocursor.addoption.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.