假设我在文档中有三个字段,分别为Count
,Rating
和AvgRating
。现在,我更新文档,并说我为Count
和Rating
分配了一些值。我还想通过获取AvgRating
和Count
的值并将其除以更新Rating
的值。现在的问题是如何在这里获取Count
和Rating
的值?
db.collection("ABC").document("XYZ").updateData([
"Count" : 2,
"Rating": 13,
"AvgRating": "//Need help here, want something like value Of Rating / value of Rating"
])
任何帮助将不胜感激!
答案 0 :(得分:1)
您将无法自动执行此操作,必须先阅读文档,然后根据需要应用转换并编写结果文档。
Firestore客户端SDK支持某种Transactions,让您可以做到这一点
答案 1 :(得分:1)
要获得已经存在的值,必须在写入之前先阅读文档。
您有两个选择
(1)首先读取文档,然后在闭包中获取文档快照,读取值,然后在计算之后,在该闭包内更新文档数据。
(2)使用事务处理首先读取数据,然后更新数据。
我建议您使用事务处理,因为它可以一次性执行操作。 (第一种方法也可以在这里应用,而不必担心失败)
首先,创建一个文档引用,例如:
let db = Firestore.firestore()
let ref = db.collection("ABC").document("XYZ")
然后
db.runTransaction({ (transaction, errorPointer) -> Any? in
let document = DocumentSnapshot?
do
{
document = try transaction.getDocument(ref)
}
catch
{
print(error)
return nil
}
guard let data = document.data()
else
{
return nil
}
//you have document data here take the values
let count = data["Count"] as! Int
let rating = data["Rating"] as! Int
//perform the calculations
let average = rating / count
//and finally updating data like
transaction.updateData([
"Count" : 2, //new count value
"Rating": 13, //new rating value
"AvgRating": average //calculated value
])
return nil
}) {
(object, error) in
if let error = error
{
print(error)
}
}