(PECL mongo >=1.0.4)
MongoCursor::addOption — Añade un par clave/valor de alto nivel a una consulta
Esta es una función avanzada y no debería usarse a menos que se sepa lo que se está haciendo.
Una consulta puede ser opcionalmente anidada en un campo "query" si se proporcionan otras opciones, como una ordenación o sugerencia. Por ejemplo, añadir una ordenación ocasiona que la consulta se convierta en un subcampo de un objeto de consulta mayor, como:
<?php
$query = array("query" => $query, "orderby" => $sort);
?>
Este método se usa para añadir un campo de alto nivel a una consulta. Hace que la consulta sea subobjeto (si ya no lo fuera) y añade el par clave/valor elegido al nivel más alto.
No se puede usar para añadir criterios extra a una consulta al vuelo. Por ejemplo, esto no funcionará:
<?php
// INCORRECTO
$cursor = $users->find()->addOption("name", "joe")->addOption("age", 20);
?>
key
El nombre del campo a añadir.
value
El valor a añadir.
Returns this cursor.
Lanza una MongoCursorException si este cursor ha empezado a iterar.
Ejemplo #1 Ejemplo para añadir un comentario con MongoCursor::addOption()
MongoDB admite el envío de opciones especiales al servidor. El shell utiliza la opción _addSpecial para enviar un comentario dado por $comment al servidor. Este comentario aparecerá en el registro de perfiles (para consultas lentas, p.ej.). En el controlador de PHP, se utilizar el método MongoCursor::addOption().
<?php
$m = new MongoClient;
$c = $m->demo->demo;
$cursor = $c->find();
$cursor->addOption('$comment', "Este comentario se mostrará en el registro de perfiles");
foreach ($cursor as $documento) { /* vacío */ }
?>
El resultado del ejemplo sería algo similar a:
{ "op" : "query", "ns" : "demo.demo", "query" : { "$query" : { }, "$comment" : "Este comentario se mostrará en el registro de perfiles" }, "cursorid" : 168463566447, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 101, "nscannedObjects" : 101, "keyUpdates" : 0, "numYield" : 0, …
Ejemplo #2 Ejemplo de MongoCursor::addOption()
El uso de MongoCursor::skip() para omitir millones de resultados puede ser lento. Un atajo para esto es usar las opciones $min o $max para la consulta. Pueden ser útiles, pero requieren un índice exactamente en los campos que van a ser buscados. Este es un ejemplo de cómo usar $min como alternativa a MongoCursor::skip().
<?php
// asegurarse de tener un índice
$c->ensureIndex(array("ts" => 1));
// podría ser necesario modificar esto para ejecutarlo en un tiempo razonable en
// máquinas lentas (debería tomar unos 30 segundos en una buena máquina)
for ($i = 0; $i < 30000000; $i++) {
$c->insert(array("ts" => new MongoDate(), "i" => $i));
}
$ahora = strtotime("now");
// buscar documentos insertados en los últimos 2 segundos
$cursor = $c->find()->addOption('$min', array("ts" => $ahora-2));
?>