如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?

Posted

技术标签:

【中文标题】如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?【英文标题】:How to fetch data from Firebase Firestore by document ID - iOS? 【发布时间】:2021-01-12 16:32:14 【问题描述】:

如何从 Firebase Firestore 中获取数据,而不是通过集合,而是从当前用户 (id) 中获取数据。 我有这段代码,但是当我添加“document(uid)”时,我收到错误消息

“无法将类型 'DocumentReference' 的值分配给类型 'CollectionReference'”

private var collectionRef: CollectionReference!


override func viewDidLoad() 
    super.viewDidLoad()
    collectionRef = Firestore.firestore().collection("userInfo")  
 

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
 
    
    collectionRef.getDocuments  (snapshot, error) in
        if let err = error 
            debugPrint("error fetching docs: \(err)")
         else 
            guard let snap = snapshot else 
                return
            
            for document in snap.documents 
                let data = document.data()
                let firstName = data[UserProfile.KEY_FIRST_NAME] as? String
                let secondName = data[UserProfile.KEY_SECOND_NAME] as? String
                
                
                self.namesLabel.text = firstName! + secondName!
                
                print(document.data())
            
        
    

【问题讨论】:

你在哪里做'''document(uid)'''?只是为了检查,查询必须遵循集合 -> 文档集合 -> 文档等模式。所以如果你只是尝试'''Firestore.firstore().document(uid)''',那是行不通的 collectionRef = Firestore.firestore().collection("userInfo") --> 我在这里添加了“document(uid)”,但我收到一条错误消息“无法分配'DocumentReference'类型的值输入“CollectionReference”,所以我删除了 哦,因为你将collectionRef的类型定义为CollectionReference,上面viewDidLoad 那么,如何解决这个问题?去掉它?如果我删除它,那么我应该调用什么函数? 嗯,这正是您问题中的代码所做的。您使用此 collectionRef = Firestore.firestore().collection("userInfo") 创建对 userInfo 集合的引用,然后使用此 collectionRef.getDocuments 获取该集合中的所有文档。那里做得很好。什么不工作?顺便说一句,在回复 cmets 中的某人时,为了引起他们的注意,请在他们的名字前添加一个 @。喜欢@ifF3 【参考方案1】:

当视图在viewWillAppear 上启动时,您正在尝试读取信息,而您等待viewDidLoad 设置应从中检索信息的收集路径,基本上这样做:

override func viewWillAppear(_ animated: Bool) 
super.viewWillAppear(animated)


    collectionRef = Firestore.firestore().collection("userInfo")  // This line
    collectionRef.getDocuments  (snapshot, error) in
        if let err = error 
            debugPrint("error fetching docs: \(err)")
         else 
            guard let snap = snapshot else 
                return
            
            for document in snap.documents 
                let data = document.data()
                let firstName = data[UserProfile.KEY_FIRST_NAME] as? String
                let secondName = data[UserProfile.KEY_SECOND_NAME] as? String
                
                
                self.namesLabel.text = firstName! + secondName!
                
                print(document.data())
            
        
    

【讨论】:

以上是关于如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 获取按变量排序的文档(文档名称未知)[关闭]

Firebase.db.collection 不是函数 || Firebase v9 ||将集合文档设置为状态时引发错误

如何从firebase中删除文档

如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?

如何限制对 Firestore 中用户拥有的文档的写入?

无法按日期从 Google Cloud Pub/Sub 功能中的 Firebase 获取文档