Как добавить гостям автоматически сгенерированные идентификаторы? Например, как показано на рисунке ниже, у меня есть два гостя: первый с ID=0, а второй с ID=1. Я хочу удалить пронумерованные идентификаторы и вместо этого добавить сгенерированные идентификаторы.
Моя функция:
fun saveToFirebase(
guest: MutableMap<String, Any>,
eventId: String,
navController: NavController,
local: Context) {
val db = FirebaseFirestore.getInstance()
val dbCollectionEvents = db.collection(COLLECTION_EVENTS)
if (guest.toString().isNotEmpty()) {
// Update the document with the new data
dbCollectionEvents.document(eventId)
.update(GUESTS, FieldValue.arrayUnion(guest))
.addOnSuccessListener {
// Document updated successfully
Toast.makeText(
local,
"Guest added",
Toast.LENGTH_SHORT
).show()
}
.addOnFailureListener { e ->
// Handle failures
Log.w("ERROR", "saveToFirebase: Error add guest", e)
Toast.makeText(
local,
"Guest addition not functioning",
Toast.LENGTH_SHORT
).show()
}
}
}
Когда вы используете FieldValue.arrayUnion(guest), это означает, что вы пытаетесь добавить новый элемент внутри массива. Эти числа 0 и 1 на самом деле являются индексами, точнее, первым и вторым индексом массива.
Если вам нужно вместо этих индексов использовать идентификаторы, вам придется добавить этих гостей как объекты внутри документа, а не как объекты внутри массива. Вот пример:
db
|
--- events (collection)
|
--- eventId (document)
|
--- guests (map)
|
--- 8ac6c1d0-55e2-4130-b247-3b1b005bcd39 //👈
|
--- adults: 2
|
--- date_registered: 29 March 2024 at 22:50:09 at UTC+2
|
--- //The other fields
Чтобы добиться этого, вам нужно использовать функцию update(), но не сообщая Firestore добавить ее в гостя array. Видите ли, ключ первого объекта — это идентификатор, который вы ищете.
Получив ответ Алекса Мамо, я изменил свой код следующим образом:
.update("гости.$guestId", гость)
if (guest.toString().isNotEmpty()) {
// Get the guest_id from Guest model
val guestId = guest.toMap()["guest_id"]
// Update the document with the new data
dbCollectionEvents.document(eventId)
.update("guests.$guestId", guest)
.addOnSuccessListener {}
}
Привет, Зартилас. Мой ответ помог? Могу ли я помочь вам с другой информацией?