SwiftUI Firebase-如何查询文档然后更新?

问题描述 投票:0回答:1

[尝试查询文档,然后在ViewModel中的函数中对其进行更新。请尝试以下类似的方法,但不起作用。任何建议,将不胜感激!

func addToFruits(name: String) {
    db.collection("fruits").whereField("name", isEqualTo: name)
        .getDocument()
        .limit(to: 1)
        .updateData(["fruits": FieldValue.arrayUnion([name])])
}


func addToRoutine(routine: String, habit: String) {
    db.collection("routines").whereField("name", isEqualTo: routine).getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                document.updateData(["habits": FieldValue.arrayUnion([habit])])
            }
        }
    }
}

在第一个错误中,我得到的错误是“类型为'Query'的值没有成员'getDocument'”,并且不确定如何解决此问题。第二个,我得到的错误是“类型'QueryDocumentSnapshot'的值没有成员'updateData'“]

firebase google-cloud-firestore swiftui
1个回答
0
投票

尚不十分清楚您要更新的内容,但以下是一些快速的示例代码,它们将在名为“ Steve”的用户中读取并将其年龄更新为50岁。请记住,这将在名为“ Steve”的第一个用户中读取并更新他们的年龄-然后再次运行时,将阅读NEXT Steve等-这可能是您尝试执行的操作。

func readUsersAndUpdateTheirAgeTo50() {
    let users = self.db.collection("users") //self.db points to *my* firestore
    users.whereField("name", isEqualTo: "Steve").limit(to: 1).getDocuments(completion: { querySnapshot, error in
        if let err = error {
            print(err.localizedDescription)
            return
        }

        guard let docs = querySnapshot?.documents else { return }

        for doc in docs {
            let docId = doc.documentID
            let name = doc.get("name")
            print(docId, name)

            let ref = doc.reference
            ref.updateData(["age": 20])
        }
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.