(PECL mongo >=0.9.3)
MongoDB::execute — Запускает код JavaScript на сервере базы данных [устарело]
Команда » 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".
Возвращает результат оценки.
Пример #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'];
?>
Результатом выполнения данного примера будет что-то подобное:
Версия | Описание |
---|---|
1.7.0 | Этот метод устарел из-за того, что команда лежащий в основе » eval устарела в MongoDB 3.0+. |