Я получаю информацию о пользователе для его страницы профиля, используя код ниже. Меня беспокоит то, что при любом масштабе масштабирование циклического перебора всех пользователей и проверка идентификатора пользователя приведут к проблемам с производительностью.
db.collection("users").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
if document.get("uid") as! String == uid {
let firstNameDisplay = document.get("firstname")!
let lastNameDisplay = document.get("lastname")!
self.firstName.text = firstNameDisplay as? String
self.lastName.text = lastNameDisplay as? String
}
}
}
}
Мой Firestore имеет следующую структуру:
Я уверен, что есть более эффективный способ добраться до указанный пользователь c, не просматривая все документы. У кого-нибудь есть предложения о том, как реализовать это эффективно?
РЕДАКТИРОВАТЬ: Добавление signUpPressed
@IBAction func signUpPressed(_ sender: UIButton) {
//Create the user
if let email = emailTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines), let password = passwordTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) {
let firstName = firstNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let lastName = lastNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let emailAddress = emailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
Auth.auth().createUser(withEmail: email, password: password) { user, error in
if error != nil {
print("ERIC: Unable to authenticate with Firebase using email")
print(error!)
}
else {
let cleanPassword = self.passwordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
if isPasswordValid(cleanPassword) == false {
print("Password does not meet the requirements! Please revise.")
return
} else {
//Create cleaned versions of data
print("ERIC: Successfully authenticated with Firebase")
if let user = user {
let userData = ["provider": user.user.providerID]
let uid = user.user.uid
self.completeSignIn(id: uid, userData: userData)
let db = Firestore.firestore()
db.collection("users").addDocument(data: ["lastname":lastName,"firstname":firstName,"email":emailAddress,"uid":uid]) { (error) in
if error != nil {
print(error!)
}
}
}
}
}
}
}
}