Запись

Обновление вложенных объектов

Предположим, мы хотим изменить имя автора комментария в этом документе:

{ 
    "_id" : ObjectId("4b06c282edb87a281e09dad9"), 
    "content" : "this is a blog post.",
    "comments" : 
    [
        {
            "author" : "Mike",
            "comment" : "I think that blah blah blah...",
        },
        {
            "author" : "John",
            "comment" : "I disagree."
        }
    ]
}
Для изменения внутреннего поля, мы используем $set (чтобы все остальные поля не были удалены!) с индексом комментария для изменения:
<?php

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

?>

Позиционный оператор

Позиционный оператор $ полезен для обновления объектов, находящихся в массивах. Например, в приведенном выше примере предположим, что мы не знали индекс комментария, который нам нужно было изменить, просто нам нужно было изменить "John" на "Jim". Для этого мы можем использовать $.

<?php

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

?>