Swift / FireStore — добавление / обновление элементов в массиве

#google-cloud-firestore

# #google-облако-firestore

Вопрос:

Итак, эта функция работает наполовину:

 API.FIRESTORE_DOCUMENT_USERID(userID: userID).updateData(["user_rating":FieldValue.arrayUnion([averageRating])])
 

Как вы можете видеть, я пытаюсь обновить user_rating поле и передать средний рейтинг. Однако, поскольку средний рейтинг может составлять от 1 до 5, включая десятичные / двойные, существует вероятность того, что средний рейтинг уже будет существовать, т. Е. 1.5, 2.5, 2.7 и т. Д. Однако, похоже, я не могу слишком добавлять одно и то же значение дважды. Если я изменю рейтинг, то, конечно, я смогу добавить. Насколько мне известно, каждая запись в массиве имеет свой собственный идентификатор? Каким-либо образом я могу разрешить дубликаты?

Спасибо.

Ответ №1:

Найдено решение, вы должны сначала прочитать существующие данные в массиве, затем добавить любые данные, которые вы хотите, а затем еще раз обновить данные, например:

 [YOUR_REFERENCE].getDocument { (querySnapshot, error) in
                if let error = error {
                    print(error.localizedDescription)
                } else {
                    var array:[THE_DATA_TYPE] = querySnapshot?.get("[FIELD_NAME]") as [THE_DATA_TYPE]
                    array.append([DATA_YOU_WISH_TO_APPEND])
                    querySnapshot?.reference.updateData(["[FIELD_NAME]" : array])
                }
            }
 

Я сделал его универсальным на случай, если кто-нибудь просто захочет скопировать и вставить.