【发布时间】:2020-06-13 20:15:12
【问题描述】:
尝试查询文档,然后在我的 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'”
【问题讨论】:
-
我不太确定你想在那里做什么 - 如果你正在执行一个查询,你应该期待一个或多个结果,所以使用
.getDocuments是你想要的。见Execute a Query。 -
请注意,代码也是格式错误的——缺少闭包代码等,因此无法按原样工作。您需要将
.updateData代码移动到.getDocuments函数之后的闭包内(一旦更正) -
你能在这里举个例子吗?我尝试了很多不同的东西,但仍然无法让它发挥作用。我已经用我试过的另一个例子更新了上面的内容。试图只找到一个文档并添加到该文档
-
阅读入门指南Writing Data 对您很有帮助,因为您的要求已涵盖。看看那个链接,看到一个文档没有 updateData 函数,documentReference 有。因此,一旦您知道 documentID 或拥有该文档,您就可以创建对它的引用,然后进行更新。重申在循环中执行此操作将更新 all 的结果。
标签: firebase google-cloud-firestore swiftui