[尝试查询文档,然后在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'“]
尚不十分清楚您要更新的内容,但以下是一些快速的示例代码,它们将在名为“ 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])
}
})
}