В базе данных реального времени используйте updateChildValues вместо setValue, если вы просто хотите обновить дочерний элемент. Я считаю, что в пожарном магазине есть что-то эквивалентное.
Ответ для базы данных в реальном времени:
Обновление
self.ref.child("users/\(user.uid)/username").setValue(username)
Установить новые данные
let key = ref.child("posts").childByAutoId().key
let post = ["uid": userID,
"author": username,
"title": title,
"body": body]
let childUpdates = ["/posts/\(key)": post,
"/user-posts/\(userID)/\(key)/": post]
ref.updateChildValues(childUpdates)
Ответ для пожарного магазина:
Просто прочитайте документацию для firestore, используйте updateData вместо addDocument:
let washingtonRef = db.collection("cities").document("DC")
// Set the "capital" field of the city 'DC'
washingtonRef.updateData([
"capital": true
]) { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
}
Установить / добавить новые данные
// Add a new document with a generated id.
var ref: DocumentReference? = nil
ref = db.collection("cities").addDocument(data: [
"name": "Tokyo",
"country": "Japan"
]) { err in
if let err = err {
print("Error adding document: \(err)")
} else {
print("Document added with ID: \(ref!.documentID)")
}
}
Таким образом, практическое правило - указывать только поле, которое необходимо обновить, вместо всей коллекции / словаря.