1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 08:22:08 +01:00
Files
archived-doc-es/reference/mongo/mongodb/execute.xml
Pedro Antonio Gil Rodríguez 0d5ebf3198 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337701 c90b9560-bf6c-de11-be94-00142212c4b1
2015-09-02 10:59:38 +00:00

261 lines
6.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 6a16b3eb24fa999fc84073abd74ee29721138bf8 Maintainer: seros 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>Ejecuta código JavaScript en el servidor de bases de datos [obsoleto]</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>
La orden <link xlink:href="&url.mongodb.docs.command;eval/">eval</link>,
la cual invoca este método, está obsoleta en MongoDB 3.0+.
</para>
</warning>
<para>
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.
</para>
<para>
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.
</para>
<para>
Este método es una envoltura para la orden de base de datos
<link xlink:href="&url.mongodb.docs.command;eval/">eval</link>.
Este método es básicamente:
<programlisting role="php">
<![CDATA[
<?php
public function execute($code, $args) {
return $this->command(array('eval' => $code, 'args' => $args));
}
?>
]]>
</programlisting>
</para>
<para>
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":
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"foo";');
?>
]]>
</programlisting>
<para>
Sin embargo, este código devuelve &null;:
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"bar"; "foo";'); // más de una sentencia
$db->execute('db.foo.count(
);'); // más de una línea
?>
]]>
</programlisting>
<para>
Para evitar comportamientos inesperados, 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:
</para>
<programlisting role="php">
<![CDATA[
<?php
$db->execute('"bar"; return "foo";');
$db->execute('return db.foo.count(
);');
?>
]]>
</programlisting>
<para>
Ahora, la primera sentencia devolverá "foo" y la segunda devolverá
un contador de la colección "foo".
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term>
<parameter>code</parameter>
</term>
<listitem>
<para>
<classname>MongoCode</classname> o texto a ejecutar.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<parameter>args</parameter>
</term>
<listitem>
<para>
Argumentos que se deben pasar a <literal>code</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve el resultado de la evaluación.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo sencillo de <function>MongoDB::execute</function></title>
<programlisting role="php">
<![CDATA[
<?php
$response = $db->execute("function() { return 'Hola, mundo!'; }");
echo $response['retval'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Hola, mundo!
</screen>
</example>
<example>
<title>Ejemplo de parámetros en <function>MongoDB::execute</function></title>
<para>
Pasaremos a la función JavaScript valores del array del parámetro opcional.
</para>
<programlisting role="php">
<![CDATA[
<?php
$response = $db->execute("function(despedida, nombre) { return despedida+', '+nombre+'!'; }", array("Hasta pronto", "Juan"));
echo $response['retval'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Hasta pronto, Juan!
</screen>
</example>
<example>
<title>Ejemplo de ámbito</title>
<para>
Si en lugar de un string, usáramos un <classname>MongoCode</classname> en el
primer parámetro, podrá pasarse un ámbito en el cual se ejecutará
JavaScript.
</para>
<programlisting role="php">
<![CDATA[
<?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'];
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
Hasta pronto, Juan, dice Fran
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member>La documentación de <link xlink:href="&url.mongodb.docs.command;eval/">la orden eval</link> de MongoDB</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>
Este método ha sido declarado obsoleto como resultado de estar también
obsoleta en MongoDB 3.0+ la orden
<link xlink:href="&url.mongodb.docs.command;eval/">eval</link>.
</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
-->