Мне нужно обновить поле во вложенном объекте с помощью динамического ключа.путь может выглядеть следующим образом: level1.level2.DYNAMIC_KEY: updatedValue Метод update удаляет все остальное на уровне 1, а не только обновляет поле во вложенном объекте.Update () действует больше как set ().Что я делаю не так?
Я уже пробовал следующее:
Я прочитал документацию https://firebase.google.com/docs/firestore/manage-data/add-data#update-data, но это так) а) статический и б) все еще удаляет другие поля.
Обновление полей во вложенных объектах Если ваш документ содержит вложенные объекты, вы можете использовать «точечную нотацию» для ссылки на вложенные поля в документе при вызове update ()
Это будет статично и приведет к
update({
'level1.level2.STATIC_KEY' : 'updatedValue'
});
Тогда я нашел ответ https://stackoverflow.com/a/47296152/5552695, который помог мне сделать динамический путь обновления.Требуемое решение после этого может выглядеть как
field[`level1.level2.${DYNAMIC_KEY}`] = updateValue;
update(field);
Но все же: оно удалит другие поля в этом пути.
ОБНОВЛЕНИЕ:
Структура моего документа выглядит следующим образом:
Поэтому внутри этой структуры я хочу обновить только complexArray> 0> innerObject> age
Запись указанного выше пути в метод update () удалит все остальное на уровне complexArray.Простое обновление полей первого уровня работает нормально и позволяет другим полям первого уровня оставаться неизменными.
Возможно ли, что функции хранилища данных, такие как update (), могут действовать только на самом низком уровне поля вдокумент.И как только я помещаю сложные объекты в документ, невозможно выбрать такие внутренние поля?Я знаю, что было бы решение выделить эти "сложные" объекты в отдельные коллекции + документы и поместить их в мой текущий самый низкий уровень документа.Я думаю, что это был бы более точный способ придерживаться принципов FireStore.Но на стороне приложения легче работать со сложным объектом, чем всегда копаться глубже в коллекции firestore + структура документа.
Поэтому мое текущее решение - отправить весь сложный объект в метод update (), даже если ятолько что изменил только одно поле на стороне приложения.