在Cloud Firestore中,事务支持使用transaction.getDocument获取文档,但即使有.getDocuments方法,似乎也没有一个可以与事务一起使用以获取多个文档的.getDocuments方法。
我有一个类似于Yelp的应用程序,使用Cloud Firestore数据库,具有以下结构: - 要评分的地点称为spots。 - 每个spot在spots集合中都有一个文档(由唯一的documentID标识)。 - 每个spot可以有一个包含该spot所有评论的reviews集合。 - 每个评论都由其自己的唯一documentID标识,并且每个评论文档都包含该spot的评分。
下面是我的Cloud Firestore设置的图像,其中包含一些数据。
我尝试创建一个事务,获取一个spot中所有评论的数据,希望我可以对平均评论进行更新计算,并将其保存回spot文档的属性中。我尝试使用:
在事务中是否可能获取一组文档?我想这样做是因为我正在对每个地点进行评级(spot),并且每当其中一个评级发生更改时,我都希望调用一个函数: - 开始一个事务(已完成) - 读入该地点的所有当前评论(无法工作) - 计算新的平均评分 - 使用新的averageRating值更新该地点。
我知道Google的FriendlyEats使用的技术是将每个更改应用于当前平均评级值,但我更喜欢在每次更改时进行精确重新计算以保持数值精度(即使需要额外的查询也可以)。感谢您的建议。
我有一个类似于Yelp的应用程序,使用Cloud Firestore数据库,具有以下结构: - 要评分的地点称为spots。 - 每个spot在spots集合中都有一个文档(由唯一的documentID标识)。 - 每个spot可以有一个包含该spot所有评论的reviews集合。 - 每个评论都由其自己的唯一documentID标识,并且每个评论文档都包含该spot的评分。
下面是我的Cloud Firestore设置的图像,其中包含一些数据。
![enter image description here](https://istack.dev59.com/P7Kup.webp)
let db = Firestore.firestore()
db.runTransaction({ (transaction, errorPointer) -> Any? in
let ref = db.collection("spots").document(self.documentID).collection("reviews")
guard let document = try? transaction.getDocuments(ref) else {
print("*** ERROR trying to get document for ref = \(ref)")
return nil
}
…
Xcode报错信息: 类型“Transaction”没有成员“getDocuments”。 有一个“getDocument”可以用来获取单个文档(请参见https://firebase.google.com/docs/firestore/manage-data/transactions)。在事务中是否可能获取一组文档?我想这样做是因为我正在对每个地点进行评级(spot),并且每当其中一个评级发生更改时,我都希望调用一个函数: - 开始一个事务(已完成) - 读入该地点的所有当前评论(无法工作) - 计算新的平均评分 - 使用新的averageRating值更新该地点。
我知道Google的FriendlyEats使用的技术是将每个更改应用于当前平均评级值,但我更喜欢在每次更改时进行精确重新计算以保持数值精度(即使需要额外的查询也可以)。感谢您的建议。