Мне кажется, вопрос в следующем:
как мне обновить определенное поле, которое хранится в документе в массиве.
Пока вы знаете идентификатор документак документу, который вы хотите обновить - вот решение.
Предполагая структуру, аналогичную описанной в вопросе
Friends (a collection)
0 (a document)
Name: "Simon"
Status: "Sent"
1
Name: "Garfunkle"
Status: "Unsent"
, и говорим, что мы хотим изменить статус Garfunkle на Отправлено
Я включу одну функцию для чтения документа 1, функцию Garfunkle, а затем вторую функцию для обновления статуса на отправленное.
Чтение документа по индексу 1 и печать его полей - эта функция предназначена только для тестирования, чтобы показатьзначения поля до и после изменения поля состояния.
func readFriendStatus() {
let docRef = self.db.collection("Friends").document("1")
docRef.getDocument(completion: { document, error in
if let document = document, document.exists {
let name = document.get("Name") ?? "no name"
let status = document.get("Status") ?? "no status"
print(name, status)
} else {
print("no document")
}
})
}
и вывод
Garfunkle Unsent
, а затем код для обновления поля состояния на Отправлено
func writeFriendStatus() {
let data = ["Status": "Sent"]
let docRef = self.db.collection("Friends").document("1")
docRef.setData(data, merge: true)
}
и вывод
Garfunkle, Sent