MongoDB::execute

(PECL mongo >=0.9.3)

MongoDB::executeЗапускает код JavaScript на сервере базы данных [устарело]

Описание

public MongoDB::execute ( mixed $code , array $args = array() ) : array
Внимание

Команда » eval, которую вызывает этот метод, не рекомендуется в MongoDB 3.0+.

Сервер базы данных Mongo работает на движке JavaScript. Этот метод позволяет запускать произвольный JavaScript в базе данных. Это может быть полезно, если вы хотите слегка коснуться нескольких коллекций или обработать некоторые результаты на стороне базы данных, чтобы уменьшить объем, который должен быть отправлен клиенту.

Запуск JavaScript в базе данных требует блокировки записи, то есть блокирует другие операции. Обязательно подумайте об этом, прежде чем запускать длинный скрипт.

Это оболочка для команды базы данных » eval. Этот метод в основном:

<?php

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

?>

MongoDB подразумевает оператор возврата, если у вас есть один оператор в одной строке. Это может вызвать некоторое неинтуитивное поведение. Например, это возвращает "foo":

<?php

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

?>

Тем не менее, это вернет null:

<?php

$db
->execute('"bar"; "foo";'); // более одного оператора

$db->execute('db.foo.count(
);'
); // более одной строки

?>

Чтобы избежать неожиданного поведения, лучше не полагаться на MongoDB, чтобы решить, что возвращать, а явно указать возвращаемое значение. В приведенных выше примерах мы можем изменить их на:

<?php

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

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

?>

Теперь первый оператор вернет "foo", а второй оператор вернет счетчик коллекции "foo".

Список параметров

code

MongoCode или строка для выполнения.

args

Аргументы для передачи в code.

Возвращаемые значения

Возвращает результат оценки.

Примеры

Пример #1 Пристой пример использования MongoDB::execute()

<?php

$response 
$db->execute("function() { return 'Привет, мир!'; }");
echo 
$response['retval'];

?>

Результатом выполнения данного примера будет что-то подобное:


Привет, мир!

Пример #2 Пример использования параметра MongoDB::execute()

Необязательный массив параметров будет передан в функцию JavaScript.

<?php

$response 
$db->execute("function(greeting, name) { return greeting+', '+name+'!'; }", array("Пока""Джо"));
echo 
$response['retval'];

?>

Результатом выполнения данного примера будет что-то подобное:


Пока, Джо!

Пример #3 Пример области

Если MongoCode объект используется вместо строки для первого параметра, можно передать область, в которой будет выполняться JavaScript.

<?php

$func 

    
"function(greeting, name) { ".
        
"return greeting+', '+name+', сказал '+greeter;".
    
"}";
$scope = array("greeter" => "Фред");

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

$response $db->execute($code, array("Пока""Джо"));
echo 
$response['retval'];

?>

Результатом выполнения данного примера будет что-то подобное:


Пока, Джо, сказал Фред

Смотрите также

Список изменений

Версия Описание
PECL mongo 1.7.0 Этот метод устарел из-за того, что команда лежащий в основе » eval устарела в MongoDB 3.0+.