Files
php-doc-ru/reference/mongo/mongodb/execute.xml
sergey 36d41451cc new: mongodb
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@347519 c90b9560-bf6c-de11-be94-00142212c4b1
2019-05-31 01:09:34 +00:00

261 lines
7.6 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 6a16b3eb24fa999fc84073abd74ee29721138bf8 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="mongodb.execute" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>MongoDB::execute</refname>
<refpurpose>Запускает код JavaScript на сервере базы данных [устарело]</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>array</type><methodname>MongoDB::execute</methodname>
<methodparam><type>mixed</type><parameter>code</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>args</parameter><initializer>array()</initializer></methodparam>
</methodsynopsis>
<warning>
<para>
Команда <link xlink:href="&url.mongodb.docs.command;eval/">eval</link>,
которую вызывает этот метод, не рекомендуется в MongoDB 3.0+.
</para>
</warning>
<para>
Сервер базы данных Mongo работает на движке JavaScript. Этот метод позволяет
запускать произвольный JavaScript в базе данных. Это может быть полезно, если вы хотите
слегка коснуться нескольких коллекций или обработать некоторые результаты на стороне
базы данных, чтобы уменьшить объем, который должен быть отправлен клиенту.
</para>
<para>
Запуск JavaScript в базе данных требует блокировки записи, то есть блокирует
другие операции. Обязательно подумайте об этом, прежде чем запускать длинный скрипт.
</para>
<para>
Это оболочка для команды базы данных
<link xlink:href="&url.mongodb.docs.command;eval/">eval</link>.
Этот метод в основном:
<programlisting role="php">
<![CDATA[
<?php
public function execute($code, $args) {
return $this->command(array('eval' => $code, 'args' => $args));
}
?>
]]>
</programlisting>
</para>
<para>
MongoDB подразумевает оператор возврата, если у вас есть один оператор в одной
строке. Это может вызвать некоторое неинтуитивное поведение. Например, это возвращает
"foo":
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"foo";');
?>
]]>
</programlisting>
<para>
Тем не менее, это вернет &null;:
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"bar"; "foo";'); // более одного оператора
$db->execute('db.foo.count(
);'); // более одной строки
?>
]]>
</programlisting>
<para>
Чтобы избежать неожиданного поведения, лучше не полагаться на MongoDB, чтобы решить,
что возвращать, а явно указать возвращаемое значение. В приведенных выше примерах
мы можем изменить их на:
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"bar"; return "foo";');
$db->execute('return db.foo.count(
);');
?>
]]>
</programlisting>
<para>
Теперь первый оператор вернет "foo", а второй оператор вернет
счетчик коллекции "foo".
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term>
<parameter>code</parameter>
</term>
<listitem>
<para>
<classname>MongoCode</classname> или строка для выполнения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<parameter>args</parameter>
</term>
<listitem>
<para>
Аргументы для передачи в <literal>code</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает результат оценки.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Пристой пример использования <function>MongoDB::execute</function></title>
<programlisting role="php">
<![CDATA[
<?php
$response = $db->execute("function() { return 'Привет, мир!'; }");
echo $response['retval'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Привет, мир!
</screen>
</example>
<example>
<title>Пример использования параметра <function>MongoDB::execute</function></title>
<para>
Необязательный массив параметров будет передан в функцию JavaScript.
</para>
<programlisting role="php">
<![CDATA[
<?php
$response = $db->execute("function(greeting, name) { return greeting+', '+name+'!'; }", array("Пока", "Джо"));
echo $response['retval'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Пока, Джо!
</screen>
</example>
<example>
<title>Пример области</title>
<para>
Если <classname>MongoCode</classname> объект используется вместо строки
для первого параметра, можно передать область, в которой будет
выполняться JavaScript.
</para>
<programlisting role="php">
<![CDATA[
<?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'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Пока, Джо, сказал Фред
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member>Документация MongoDB по <link xlink:href="&url.mongodb.docs.command;eval/">команде eval</link></member>
</simplelist>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>1.7.0</entry>
<entry>
Этот метод устарел из-за того, что команда лежащий в основе
<link xlink:href="&url.mongodb.docs.command;eval/">eval</link>
устарела в MongoDB 3.0+.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->