
既存のドキュメントのフィールドを更新する方法をまとめておきます。
update()メソッドを使えば良い
1 2 3 |
ドキュメントへの参照(パス).updateData([ "キー値": 更新したい値 ]) |
具体例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private func updateProfile() { guard let userId = Auth.auth().currentUser?.uid else { fatalError() } let ref = db.collection("users").document(userId) ref.updateData([ "userName": userNameTextField.text ?? "noname" ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } } } |
一つずつ説明していきます。
private func updateProfile() {}
これはユーザーのプロフィールを更新するためのメソッドなのでこのような名前にしました。皆さんそれぞれ好きな名前をつけてください。
fa-chevron-circle-right別のVCでドキュメント名を.uidで作成しているので、userIdに.uidを代入
guard let userId = Auth.auth().currentUser?.uid else { fatalError() }
ドキュメントを作る際、特に指定しなければドキュメント名はFirestore側が勝手に決めます。私はそれが嫌だったので別の(前の)画面のViewControllerでAuthの.uidをドキュメント名に指定しました。
そのため、ここでも定数userId
にAuth.auth().currentUser?.uid
(現在のユーザーの.uid)を代入しています。
fa-chevron-circle-rightドキュメントのパスを定数refに代入
let ref = db.collection("users").document(userId)
パス(更新したいフィールドのありか)を定数refに入れる。userId
にはすでにAuthの.uidが入っているため、db.collection("users").document(userId)
で現在のユーザーの.uidと同じ.uidを名前に持つドキュメントを特定できる。
↑ドキュメント名がuidと一致している
fa-chevron-circle-rightキー値"userName"の値を更新する
ref.updateData([
"userName": userNameTextField.text ?? "noname"
]) ~ }
.updateData()
で値の更新ができます。指定したドキュメント内でキー値"userName"
で保存されている値を変数userNameTextField
の.text
の値に更新しています。
??
演算子は左辺にOptional
左辺のOptional
つまり、左辺に値がない場合は右辺の値("noname"
)がデフォルトの値(ユーザー名)になるということです。