2014-11-24 5 views
0

У меня есть документ с дочерними элементами элементов, как такPHP обновление MongoDB дочерний элемент

"bar" : "547244fe10f0edd3128b4567", 
    "items" : [ 
     { 
      "1" : { 
       "message" : "", 
       "display" : "true", 
       "type" : "text" 
      } 
     }, 
     { 
      "2" : { 
       "id" : "234234", 
       "type" : "image", 
       "message" : "foo", 
       "display" : "true", 
       "created_at" : NumberLong(1416432114) 
      } 
     }, 
     { 
      "3" : { 
       "message" : "", 
       "display" : "true", 
       "type" : "text" 
      } 
     }, 

и я пытаюсь обновить один из детей дорожим

$foo['items']['1']['message'] = 'hello'; 
$story = InfoDB::where('_id', $id)->update($foo); 

Так что

 "1" : { 
      "message" : "", 
      "display" : "true", 
      "type" : "text" 
     } 

Становится

 "1" : { 
      "message" : "hello", 
      "display" : "true", 
      "type" : "text" 
     } 

Но когда я запускаю команду обновления, она удаляет все дочерние элементы в документе.

Нужно ли обновлять весь документ? или есть другая функция?

Я использую https://github.com/jenssegers/laravel-mongodb

ответ

1

Поскольку каждый из вас «пунктов» является элемент его собственного апа есть, следовательно, собственный индекс массива, вы должны сделать небольшую корректировку коды. Так что просто попробуйте заменить этот код

$foo['items']['1']['message'] = 'hello'; 

с этим одним

$foo['items'][0]['1']['message'] = 'hello'; 

это будет вызывать первый элемент (0), а затем конкретный ключ в пункте («1»).

Смежные вопросы