MongoDB
PHP Manual

MongoDB::execute

(PECL mongo >=0.9.3)

MongoDB::executeEjecuta código JavaScript en el servidor de bases de datos

Descripción

public array MongoDB::execute ( mixed $code [, array $args = array() ] )

El servidor de bases de datos de Mongo contiene un motor JavaScript. Este método permite ejecutar cualquier código JavaScript en la base de datos. Puede resultar útil si se desea trabajar ligeramente sobre algunas colecciones, o procesar algunos resultados en el lado del servidor para reducir la cantidad de datos que se enviará al cliente.

Al ejecutar JavaScript en la base de datos se hace un bloqueo de escrituras, lo cual significa que se bloquean otras operaciones. Asegúrese de que tiene esto en consideración antes de ejecutar scripts costosos.

Este método es una envoltura de un comando de base de datos. Básicamente, sería:

<?php

public function execute($code$args) {
    return 
$this->command(array('$eval' => $code'args' => $args));
}

?>

Si se tuviera una única sentencia en una única línea, MongoDB devuelve un valor. Esto puede provocar comportamientos inesperados. Por ejemplo, el siguiente código devuelvo "foo":

<?php

$db
->execute('"foo";');

?>

Sin embargo, este código devuelve NULL:

<?php

$db
->execute('"bar"; "foo";'); // más de una sentencia

$db->execute('db.foo.count(
);'
); // más de una línea

?>

Para evitar estos comportamientos, lo mejor es no dejar que MongoDB decida qué devolver, usando en su lugar una sentencia "return" explícita. Podríamos cambiar los ejemplos superiores por lo siguiente:

<?php

$db
->execute('"bar"; return "foo";');

$db->execute('return db.foo.count(
);'
);

?>

Ahora, la primera sentencia devolverá "foo" y la segunda devolverá un contador de la colección "foo".

Parámetros

code

MongoCode o texto a ejecutar.

args

Argumentos que se deben pasar a code.

Valores devueltos

Devuelve el resultado de la evaluación.

Ejemplos

Ejemplo #1 Ejemplo sencillo de MongoDB::execute()

<?php

$response 
$db->execute("function() { return 'Hola, mundo!'; }");
echo 
$response['retval'];

?>

El resultado del ejemplo sería algo similar a:


Hola, mundo!

Ejemplo #2 Ejemplo de parámetros en MongoDB::execute()

Pasaremos a la función JavaScript valores del array del parámetro opcional.

<?php

$response 
$db->execute("function(despedida, nombre) { return despedida+', '+nombre+'!'; }", array("Hasta pronto""Juan"));
echo 
$response['retval'];

?>

El resultado del ejemplo sería algo similar a:


Hasta pronto, Juan!

Ejemplo #3 Ejemplo de ámbito

Si en lugar de un string, usáramos un MongoCode en el primer parámetro, podrá pasarse un ámbito en el cual se ejecutará JavaScript.

<?php

$func 

    
"function(despedida, nombre) { ".
        
"return despedida+', '+nombre+', dice '+despedidor;".
    
"}";
$scope = array("despedidor" => "Fran");

$code = new MongoCode($func$scope);

$response $db->execute($code, array("Hasta pronto""Juan"));
echo 
$response['retval'];

?>

El resultado del ejemplo sería algo similar a:


Hasta pronto, Juan, dice Fran

MongoDB
PHP Manual