php mongodb обновляет дочерний элемент

0

У меня есть документ с дочерними элементами таких элементов

"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 ответ

1
Лучший ответ

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

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

с этим

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

Это вызовет первый элемент (0), а затем конкретный ключ внутри элемента ("1").

Ещё вопросы

Сообщество Overcoder
Наверх
Меню