Итак, я вижу, что вы используете облачное хранилище для сохранения изображений профиля и хотите сохранить каждый из URL-адресов этих изображений. Вы должны понимать, что и setValue () и updateValue () делают примерно одно и то же. Примечание с updateValue () - он создаст этот документ, если он еще не существует. Таким образом, при обновлении значений в Firestore следует понимать, что оно устанавливает значение в соответствии с тем, что вы ему даете, что поначалу может вводить в заблуждение.
1-й. При обновлении любого документа начните с получения документа первым. Если люди постоянно обновляют разные документы, вы можете рассмотреть возможность использования транзакций Firestore: https://firebase.google.com/docs/firestore/manage-data/transactions#transactions
Это обеспечит правильное обновление ваших данных.
2-й Добавить URL к массиву, я не такой, как вы его настраиваете, но я бы настроил firestore, чтобы он выглядел примерно так
"users" = [
"unique_id = "{
"firstname": "John",
"lastname": "Doe",
"unique_id": "document_id_here"
"faces": [ {key: value} ]
}
]
Когда вы сериализуете этот объект, ваш объект лица должен быть таким [[String: Any]]
3-й, последний шаг - получить документ и обновить только это значение
// Get the value in the completion with the data use this code
// Drill down to the property you want to update using the completion data ex.
var faces = completedData.faces
faces.append("[key: value]")
// Update the data back to firestore
let path = Firestore.firestore().collection("users").document("unique_user_id")
// Merging is so important. otherwise it will override your document
path.setData(["facesKey: faces"], merge: true) {(error in
if let error = error {
// good error handling here
}
// Successfully updated document
)}