Firestore обновить определенный элемент в массиве - PullRequest
0 голосов
/ 15 ноября 2018

Я использую Google Firestore с Angular, и я пытаюсь обновить определенный элемент внутри массива.

Я много чего пробовал, но безуспешно.

Как получить доступ к индексу конкретной компании в массиве компаний?

Спасибо:)

enter image description here

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Хорошо, есть способ запроса массива.

Я не на 100%, если это сработает, но я пробовал это раньше.Может потребоваться полный объект.

this.usersCollection = this.afs.collection('Users', ref => ref.where('companies', 'array-contains', {location: 'test'}) );

Если это не сработает, у вас всегда есть возможность сделать подколлекцию с компаниями, находящимися там, в качестве документа.

0 голосов
/ 15 ноября 2018

Как получить доступ к индексу конкретной компании в массиве компаний?

Нет способа получить, обновить или удалить элемент в массиве Firestore в соответствии с соответствующим индексом. Подумайте, что может произойти, если пользователь хочет изменить значение с индексом 0, другой пользователь хочет удалить значение с индексом 0, и в то же время другой пользователь хочет добавить другое значение с индексом 1, вы в конечном итоге с очень разными результатами и почему нет, ArrayIndexOutOfBoundsException . Так что действия Firestore с массивами немного отличаются. Таким образом, вы не можете выполнять такие действия, как вставка, обновление или удаление по определенному индексу. Поэтому используйте массивы только в том случае, если вам не нужен точный порядок хранения элементов.

Firestore добавил несколько недель назад некоторые функции для добавления или удаления определенных элементов, но только если их не заботит точное расположение. См. здесь официальная документация.

В вашем случае у вас нет простого массива строк, у вас есть массив объектов, что означает, что для выполнения некоторых изменений вы должны получить весь объект, перебрать свойства, внести необходимые изменения и запишите его обратно в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...