尝试查询文档,然后在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'”
答案 0 :(得分: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])
}
})
}
如果我只是想将史蒂夫的年龄全部更新为50岁,请取消限制
.limit(to: 1)
请注意,此代码有点草率,因为限制为1,所以我们不需要循环。另外请注意,并不是每个Steve都为50,因此应该有其他参数来缩小它的范围,例如uid。