2016-08-02 6 views
2

Я использую этот PHP libarary http://mongodb.github.io/mongo-php-library/Как обновить вспомогательный документ в MongoDB PHP с использованием новой библиотеки драйвера PHP

У меня есть сообщения сбора и в одном документе я добавляю несколько комментариев, которые я могу добавить новые комментарии, как это

$collection = (new MongoDB\Client)->project->posts; 
$id = '5799a81fa60afa2010001838'; 
$result = $collection->updateOne(

    ["_id" => new MongoDB\BSON\ObjectID($id)], 

    ['$push' => [ 
      "comments" => ['id'=>1,'name' => 'sohss','comm'=>'I like it'] 
       ] 
    ] 

    ); 

Теперь, как можно обновить любой конкретный комментарий я пытался, как это, но не успех

$updateResult = $collection->updateOne(
       ['_id' => new MongoDB\BSON\ObjectID($id),'comments'], 
       ['$set' => 
          ['comments'=>[0]=> 
             ['name'=>'123'] 
          ] 
       ] 
      ); 

Что правильный синтаксис для обновления под документом.

Структура документа выглядит следующим образом:

{ 
"_id" : ObjectId("5799a81fa60afa2010001838"), 
"title" : "test", 
"comments" : [ 
    { 
     "id" : 3, 
     "name" : "soh", 
     "comm" : "I like it" 
    }, 
    { 
     "id" : 1, 
     "name" : "sohss", 
     "comm" : "I like it" 
    } 
    ] 
} 
+0

Можете ли вы показать текущую структуру документа, а также структуру обновленного документа – Webdev

+0

и как обновленный документ должен выглядеть? – Webdev

+0

Я хочу обновить поле «comm»: «Мне нравится» в дополнительном документе, как я могу это сделать –

ответ

0

Нам нужно использовать позиционный оператор $, чтобы обновить конкретное поле в поддокументе, например, если я хочу, чтобы изменить имя в поддокументе ид 3 мы можем сделать так

$updateResult = $collection->updateOne(
       ['_id' => new MongoDB\BSON\ObjectID($id),'comments.id'=>3], 
       ['$set' => 
          ['comments.$.name'=> 'Sohail anwar' 

          ] 
       ] 
      );