【问题标题】:How to add data to an existing Document in a Firestore Database如何将数据添加到 Firestore 数据库中的现有文档
【发布时间】:2020-06-20 17:14:49
【问题描述】:

嘿,我目前开始如何使用 swift 进行编码,现在我正面临着我现在无法自行解决的第一个大问题。我的问题是,在登录屏幕之后,应该将一些数据添加到 Firebase 中的此用户数据库文档中,然后转移到主屏幕。过渡到主屏幕效果很好,唯一的问题是数据没有存储在 Firebase 数据库对象中。我的代码如下所示:

    @IBAction func weiterButtonTapped(_ sender: Any) {
    let error = validateFields()
    
    if error != nil{
        //Fehler
        showError(error!)
    }else{
        //Daten aus Textfeld ziehen
        let aimedWeight = zielTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        let height = groesseTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        let weight = gewichtTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        
        let user = Auth.auth().currentUser
        let db = Firestore.firestore()
        
        if user != nil{
            db.collection("Nutzer")
                .whereField("uid", isEqualTo: user!.uid)
                .getDocuments { (snap, err) in
                    if let err = err {
                        //error
                        print(err)
                    }else if snap!.documents.count != 1{
                        //error later on
                    }else{
                        //add data
                        var document = snap!.documents.first?.data()
            
                        document?.updateValue(height, forKey: "Größe")
                    
                        
                    }
                }
            
        }else{
            showError("Fehler")
        }
        toHomeScreen()
    }
}

我希望有人可以提供帮助。谢谢

【问题讨论】:

  • 我建议添加一些代码来检查 updateValue 的结果是否有错误。

标签: swift firebase google-cloud-firestore


【解决方案1】:

我的第一个猜测是在导航到下一个屏幕后写入尚未完成。如果确实是这个原因,您需要等待写入完成,然后再调用 toHomeScreen(),就像您在写入之前已经等待 getDocuments() 完成一样。

@IBAction func weiterButtonTapped(_ sender: Any) {
let error = validateFields()

if error != nil{
    //Fehler
    showError(error!)
}else{
    //Daten aus Textfeld ziehen
    let aimedWeight = zielTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    let height = groesseTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    let weight = gewichtTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    
    let user = Auth.auth().currentUser
    let db = Firestore.firestore()
    
    if user != nil{
        db.collection("Nutzer")
            .whereField("uid", isEqualTo: user!.uid)
            .getDocuments { (snap, err) in
                if let err = err {
                    //error
                    print(err)
                }else if snap!.documents.count != 1{
                    //error later on
                }else{
                    //add data
                    var document = snap!.documents.first?.data()
        
                    document?.updateValue(height, forKey: "Größe") { err in
                        if let err = err {
                            print("Error updating document: \(err)")
                        } else {
                            print("Document successfully updated")
                            toHomeScreen()
                        }
                    }                    
                    
                }
            }
        
    }else{
        showError("Fehler")
    }
}

不相关:我还建议将用户数据存储在用户的 UID 下,而不是另一个自动生成的 ID 下。 UID 也保证是唯一的,使用它们可以使这段代码更简单:

db.collection("Nutzer").document(user!.uid)?.updateValue(height, forKey: "Größe")...

【讨论】:

  • 再次感谢它有效。惊人的。我将存储数据的ID更改为uid。我的代码现在看起来很干净,谢谢!
【解决方案2】:

.set 将覆盖现有文档。

const docRef = firestoreDb.collection('Nutzer').doc(uid);
return docRef.set({
                    aimedWeight : _aimedWeight,
                    height : _height,
                    weight : _weight 
                    }).then(() => {
                    return {
                        success: true
                        };
                    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2021-08-18
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多