Escrituras

Actualización de objetos anidados

Supongamos que queremos cambiar el nombre del autor de un comentario en este documento:

{ 
    "_id" : ObjectId("4b06c282edb87a281e09dad9"), 
    "content" : "this is a blog post.",
    "comments" : 
    [
        {
            "author" : "Mike",
            "comment" : "I think that blah blah blah...",
        },
        {
            "author" : "John",
            "comment" : "I disagree."
        }
    ]
}
Para cambiar un campo interno usamos $set (de manera que el resto de campos no se eliminen) con el índice del comentario a cambiar:
<?php

$blog
->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));

?>

El operador posicional

El operador posicional $ es útil a la hora de actualizar objetos de 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 $ para lograrlo.

<?php

$blog
->update(
    array(
"comments.author" => "John"), 
    array(
'$set' => array('comments.$.author' => "Jim")));

?>