Cloud Firestore: добавьте ИЛИ обновите массив - PullRequest
0 голосов
/ 18 июня 2019

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

Я хочу хранить все эти теги в массиве внутри документа для каждого пользователя. Каждый раз, когда пользователь загружает фотографию, эти теги должны быть добавлены в этот массив.

Я использую метод update, так как не хочу, чтобы список перезаписывался, но данные, похоже, вообще не создаются. Может ли это быть потому, что для нового пользователя список на самом деле не существует? Мне нужна функция для создания документа и массива, если пользователь впервые добавляет какие-либо интересы, или просто обновляет список и добавляет элементы, если массив уже существует.

Кроме того, теги добавляются в полный список всех тегов в приложении. Для этого я попытался использовать метод set, но тогда список просто полностью перезаписывается, даже когда я добавил SetOptions.merge()

val db = FirebaseFirestore.getInstance()

val userInterestsDoc = db.collection("interests").document(currentUser.uid)
val allTagsListDoc = db.collection("all_tags").document("all_tags")

for (tag in imageTagsList) {
 userInterestsDoc.update("interests_list", FieldValue.arrayUnion(tag))
                       .addOnSuccessListener {
                        allTagsListDoc.set(
                            mapOf(
                                "all_tags_list" to arrayListOf(tag)
                            ), SetOptions.merge()
                        )
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...