Удалить массив элементов из Google Cloud Firestore

Я запускаю приложение для Android, которое использует Google Cloud Firestore. Но когда я пытаюсь удалить что-то из firestore, оно не исчезает.

Вот изображение Cloud Firestore:

И вот мой код для удаления элемента массива:

fun updateData(userId: String, values: Map<String, Any>) =
                db.collection("lotoup").document("loter").update(values)

И вот мой код, который вызывает функцию:

var document = task.getResult()
var group = document?.get("lotarray") as List<String>
val group_array: Array<String>
Log.d("myTag", group.toString())
val lotnumber = group.random().toString()
lotnum.text = lotnumber
updateData("Alexander", mapOf("lotarray.${group.indexOf(lotnumber)}" to FieldValue.delete()))

А это БД:

val db: FirebaseFirestore = FirebaseFirestore.getInstance()

Вы пытались прикрепить прослушиватель, чтобы увидеть, если что-то не так?

Alex Mamo 23.12.2020 12:30

Да. Я попытался подключить прослушиватель. Все в порядке.

Bla0 23.12.2020 12:59

Я почти уверен, что FieldValue.delete() удаляет все поле, а НЕ запись в поле массива.

LeadDreamer 23.12.2020 17:39

Хорошо. Но в таком случае как?

Bla0 24.12.2020 13:54
0
4
270
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для обновления элементов массива есть специальные методы FieldValue: arrayUnion() и arrayRemove(). Хороший пример есть в документации Firebase , а вот ссылка.

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

document.getReference().update( "lotarray", FieldValue.arrayRemove(lotnumber) )

Судя по тому, как он используется с get(), я предполагаю, что document — это DocumentSnapshot, и, поскольку я не могу это проверить, пожалуйста, относитесь к нему как к псевдокоду.

Другие вопросы по теме