Как написать массив списков строк в Firestore. Android - PullRequest
2 голосов
/ 11 октября 2019

Мне нужно написать простую коллекцию, в которой документы содержат только список массивов строк.

usersBlocked
    -blockerID
         - usersBlockedList
               -userID1
               -....
               -userIDN

В данный момент я могу обновить список, если документ уже существует таким образом :(для тестирования porpouse я написал это вручную).

val reference = Firebase.firestore
            .collection("usersBlocked")
            .document(userIDBlocker)

reference.update("usersBlocked", FieldValue.arrayUnion(userIDToBlock))
            .addOnSuccessListener { Logger.d("Blocked") }
            .addOnFailureListener { Logger.d(it.localizedMessage) }

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

NOT_FOUND: No document to update: projects/xxxxxx/databases/(default)/documents/usersBlocked/2oLOYbG2z9gRC5VugchEP7ZPpy53

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

Я видел, как сохранить Карты, но это не то, что мне нужно.

Структура БД:

enter image description here

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Сначала вы должны подтвердить, что есть любой документ, доступный с вашим текущим userid. Поставьте условие, как я поставил. Он проверит, доступен ли идентификатор или нет. Если идентификатор недоступен. Затем он сгенерирует новый документ у ваших пользователей, заблокированный с помощью uid и store store.

val reference = Firebase.firestore
    .collection("usersBlocked")
    .document(userIDBlocker).get()
        .addOnSuccessListener { documentSnapshot ->
            if (documentSnapshot.exists()) {
                reference.update("usersBlocked", FieldValue.arrayUnion(userIDToBlock))
            } else {
                val userdetail = HashMap<String, Any>()
                var usersBlockedList = arrayListOf<String>()
                usersBlockedList.add(userIDToBlock)
                userdetail["usersBlocked"] = usersBlockedList
                Firebase.firestore.collection("usersBlocked").document(userIDBlocker).set(userdetail)
                        .addOnSuccessListener { success ->

                        }
                        .addOnFailureListener { exception ->
                            Log.e("Data Failed", "To added because ${exception}")
                        }

            }
        }
        .addOnFailureListener { exception ->
        Log.e("Exception", "${exception}")
        }
0 голосов
/ 11 октября 2019

Заменить .update(data) на .set(data, SetOptions.merge()) - это создаст документ, если он отсутствует, и обновит его в противном случае.

Данные будут картой:

val data = mapOf(
    "usersBlocked" to FieldValue.arrayUnion(userIDToBlock)
)

Документы: https://firebase.google.com/docs/firestore/manage-data/add-data#set_a_document

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