PHP Conference China 2020

MongoCursor::addOption

(PECL mongo >=1.0.4)

MongoCursor::addOptionAñade un par clave/valor de alto nivel a una consulta

Descripción

public MongoCursor::addOption ( string $key , mixed $value ) : MongoCursor

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.

Advertencia

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);

?>
Esto no consultará por un ususario llamado "joe" de 20 años.

Parámetros

key

El nombre del campo a añadir.

value

El valor a añadir.

Valores devueltos

Returns this cursor.

Errores/Excepciones

Lanza una MongoCursorException si este cursor ha empezado a iterar.

Ejemplos

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));

?>
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top