Транзакции в Cloud Firestore поддерживают получение документа с использованием транзакции .getDocument, но даже при наличии метода .getDocuments, похоже, не существует .getDocuments для получения нескольких документов, которые работают с транзакцией.
У меня есть приложение, похожее на Yelp, использующее базу данных Cloud Firestore со следующей структурой: - Места для оценки называются точками.- Каждое пятно имеет документ в коллекции пятен (идентифицируется уникальным documentID).- Каждое место может иметь коллекцию отзывов, содержащую все отзывы для этого места.- Каждый отзыв идентифицируется собственным уникальным documentID, и каждый обзорный документ содержит рейтинг места.
Ниже приведено изображение моей установки Cloud Firestore с некоторыми данными.
Я пытался создать транзакцию, получая данные для всех обзоров на месте, в надежде, что затем смогу сделать обновленный расчет среднего отзыва и сохранитьэто обратно к свойству спотового документа.Я пытался использовать:
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 состояния: значение типа «Транзакция» не имеет члена «getDocuments».Существует getDocument, который можно использовать для получения одного документа (см. https://firebase.google.com/docs/firestore/manage-data/transactions).
Можно ли получить коллекцию документов в транзакции? Я хотел сделать это, потому что каждое местоУ моего рейтинга (спот) есть средний рейтинг, и всякий раз, когда происходит изменение одного из рейтингов, я хочу вызвать функцию, которая: - запускает транзакцию (выполнено) - читает все текущие обзоры для этого спота (можетне приступайте к работе) - рассчитывает новый средний рейтинг - обновляет спот новым значением среднего рейтинга.
Я знаю, что в FriendlyEats от Google используется метод, в котором каждое изменение применяется к текущему среднему значению рейтинга, но я быпредпочитайте делать точные пересчеты с каждым изменением, чтобы сохранить числовую точность (даже если это немного дороже с дополнительным запросом). Спасибо за совет.