1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-25 16:02:13 +01:00
Files
archived-doc-es/reference/mongo/updates.xml
Pedro Antonio Gil Rodríguez 48db252cf2 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@334831 c90b9560-bf6c-de11-be94-00142212c4b1
2014-09-10 08:34:08 +00:00

166 lines
4.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 565e478d69a9d0c217eda773c77ca823423adf21 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="mongo.updates" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Actualizaciones</title>
<para>
Las actualizaciones quizás sean las operaciones más complicadas de las disponibles
en MongoDB. Combinan una consulta junto con una acción, modificando los documentos que concuerdan
con los criterios de selección. Son también muy potentes, permitiendo cambiar rápidamente
los documentos y reemplazarlos. Se realiza al momento (siempre y cuando
sea posible), minimizando el consumo de recursos.
</para>
<section>
<title>Modificación o reemplazo de documentos</title>
<para>
Existen dos tipos de actualizaciones: actualizaciones de modificación y actualizaciones
de reemplazado. Las actualizaciones de modificación contienen operandos $ y cambian los campos
de un documento: pueden incrementar contadores, agregar elementos a un array,
o modificar el tipo de dato de un campo.
</para>
<para>
Por ejemplo, una actualización de modificación puede añadir un nuevo campo a un documento.
<programlisting role="php">
<![CDATA[
<?php
/** supongamos un documento así:
* {"username" : "...", "password" : "...", "email" : "..."}
*/
$coll->update(array("username" => "joe"), array('$set' => array("twitter" => "@joe4153")));
/** ahora el documento sería así:
* {"username" : "joe", "password" : "...", "email" : "...", "twitter" : "@joe4153"}
*/
?>
]]>
</programlisting>
</para>
<para>
Las actualizaciones de reemplazado modifican todo el documento seleccionado por otro
nuevo. Generalmente no es tan eficientes como usar operandos $, pero pueden ser muy
útiles en operaciones complejas o en actualizaciones que no se pueden expresar en términos
de operandos $.
</para>
<para>
Por ejemplo, una actualización de reemplazado puede cambiar por completo la estructura de un
documento.
<programlisting role="php">
<![CDATA[
<?php
/** supongamos un documento así:
* {"username" : "...", "password" : "...", "email" : "..."}
*/
$coll->update(array("username" => "joe"), array("userId" => 12345, "info" => array(
"name" => "joe", "twitter" => "@joe4153", "email" => "..."), "likes" => array()));
/** ahora el documento quedaría así:
* {
* "userId" : 12345,
* "info" : {
* "name" : "joe",
* "twitter" : "@joe4153",
* "email" : "..."
* },
* "likes" : []
* }
*/
?>
]]>
</programlisting>
</para>
</section>
<section>
<title>Actualizando Objetos Anidados</title>
<para>
Supongamos que queremos cambiar el nombre del autor de un comentario en este documento:
<programlisting role="javascript">
<![CDATA[
{
"_id" : ObjectId("4b06c282edb87a281e09dad9"),
"content" : "this is a blog post.",
"comments" :
[
{
"author" : "Mike",
"comment" : "I think that blah blah blah...",
},
{
"author" : "John",
"comment" : "I disagree."
}
]
}
]]>
</programlisting>
Para cambiar el campo interno, usamos $set (de manera que no se eliminen el resto
de campos) con el índice del comentario a cambiar:
<programlisting role="php">
<![CDATA[
<?php
$blog->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));
?>
]]>
</programlisting>
</para>
</section>
<section>
<title>El Operador Posicional</title>
<para>
El operador posicional <literal>$</literal> es útil a la hora de actualizar objetos
en arrays. En el ejemplo anterior, por ejemplo, podríamos no conocer el índice del comentario
que necesitamos modificar, sólo sabemos que queremos cambiar "John" a "Jim". Podemos usar
<literal>$</literal> para lograrlo.
</para>
<programlisting role="php">
<![CDATA[
<?php
$blog->update(
array("comments.author" => "John"),
array('$set' => array('comments.$.author' => "Jim")));
?>
]]>
</programlisting>
</section>
</chapter>
<!-- 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
indent-tabs-mode:nil
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
-->