【问题标题】:Print a firebase document打印 Firebase 文档
【发布时间】:2021-03-29 08:18:34
【问题描述】:

我只想打印一个 firebase 文档而不是整个集合,我不知道该怎么做。 目前我的代码看起来像这样,但它打印整个“用户”集合,我希望能够只打印专用于所选用户的文档:

struct Users: Identifiable {
    var id: String = UUID().uuidString
    var code_postal: String
    var creatdAt: String
    var email: String
    var is_new: String
    var nom: String
    var prenom: String
    var tel: String
    var ville: String
}

class UsersViewModel: ObservableObject {
    @Published var users = [Users]()
    private var db = Firestore.firestore()
    let is_user = Auth.auth().currentUser

    func fetchDate() {
        db.collection("users").addSnapshotListener { (querySnapshot, error) in
            guard let documents = querySnapshot?.documents else {
                print("No documents")
                return
            }
            
            self.users = documents.map { queryDocumentSnapshot -> Users in
                let data = queryDocumentSnapshot.data()
            
                let code_postal = data["code_postal"] as? String ?? ""
                let creatdAt = data["creatdAt"] as? String ?? ""
                let email = data["email"] as? String ?? ""
                let is_new = data["is_new"] as? String ?? ""
                let nom = data["nom"] as? String ?? ""
                let prenom = data["prenom"] as? String ?? ""
                let tel = data["tel"] as? String ?? ""
                let ville = data["ville"] as? String ?? ""

                
                return Users(id : .init(), code_postal: code_postal, creatdAt: creatdAt, email: email, is_new: is_new, nom: nom, prenom: prenom, tel: tel, ville: ville)
            }
        }
    }
}

这是我打印数据库的功能:

struct ProfileView: View {
    @ObservedObject private var viewModel = UsersViewModel()
    var body: some View {
        HStack(alignment: .top){
                List(viewModel.users) { users in
                    VStack(alignment: .leading) {
                            Section(header: Text("Prenom: ")) {
                                Text(users.prenom)
                            }
                            Section(header: Text ("Nom : ")) {
                                Text(users.nom)
                            }
                            Section(header: Text ("Ville : ")) {
                                Text(users.ville)
                            }
//                        Text ("Code postal : ")
//                        Text(users.code_postal)
//                            .font(.subheadline)
//                        Text ("Téléphone : ")
//                        Text(users.tel)
//                            .font(.subheadline)
//                        Text ("Email : ")
//                        Text(users.email)
//                            .font(.subheadline)
//                        Text ("Date d'inscription : ")
//                        Text(users.createdAt)
//                            .font(.subheadline)
                    }
                }
                .navigationBarTitle("News")
            }
            .onAppear() {
                self.viewModel.fetchDate()
            }
        Button(action: {
            try! Auth.auth().signOut()
            UserDefaults.standard.set(false, forKey: "status")
            NotificationCenter.default.post(name: NSNotification.Name("status"), object: nil)
        }, label: {
            Text("Déconnexion")
        })
    }
}

感谢您的帮助

【问题讨论】:

  • 如何在您的数据库中识别用户?
  • 我不明白
  • 我认为你的意思是用户 ID,我得到了这样一个 guard let UserID = self.is_user?.uid else { return }
  • 在 Firebase 文档中,您可以找到获取单个文档的示例,特别是在 Swift 中,firebase.google.com/docs/firestore/query-data/…

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

您必须获取文档本身:

db.collection("users").document("userxyz789").addSnapshotListener { (docSnapshot, error) in
    ...
}

或在集合中查询:

db.collection("users").whereField("userId", isEqualTo: "userxyz789").addSnapshotListener { (querySnapshot, error) in
    ...
}

您当前正在做的是获取整个集合。

【讨论】:

  • 感谢您的回答,但按照您告诉我的操作,我在以下行出现错误“'DocumentSnapshot' 类型的值没有成员 'map'”:```self.users = 文档.map { queryDocumentSnapshot -> 让数据中的用户 = queryDocumentSnapshot.data() ```
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多