У меня есть документ с дочерними элементами таких элементов
"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
Поскольку каждый из ваших "элементов" - это отдельный элемент, поэтому имеет собственный индекс массива, вы должны внести небольшую корректировку в свой код. Так что просто попробуйте заменить этот код
$foo['items']['1']['message'] = 'hello';
с этим
$foo['items'][0]['1']['message'] = 'hello';
Это вызовет первый элемент (0), а затем конкретный ключ внутри элемента ("1").