Как отфильтровать данные в ветке Firebase

swift

#1

Пользователь нажимает кнопку Нравится под постом (аудиозаписью) другого пользователя и соответствующая информация отображается в ветке Firebase в ветке likes

Синий цвет-id текущего залогиненного пользователя, зеленый-id пользователя чью запись лайкнули, красный-id аудиозаписи, которую лайкнули.
В ветке records отображаются все аудиозаписи всех пользователей приложения.
Моя задача на отдельном ViewController отобразить только те аудиозаписи, которые были лайкнуты текущим пользователем. Но с моим кодом отображаются все записи пользователя (зеленый цвет), а не только запись с нужным id (красный цвет). Подскажите как отфильтровать и выдавать только те записи, которые хранятся в ветке likes

fileprivate func fetchRecordsWithUser(user: User2){

let ref = Database.database().reference().child("records").child(user.uid)
ref.observeSingleEvent(of: .value, with: { (snapshot) in

    guard let dictionaries = snapshot.value as? [String: Any] else { return }

    dictionaries.forEach({ (key, value) in
        guard let dictionary = value as? [String: Any] else { return }
        let record = Records(user: user, dictionary: dictionary)
        self.records.append(record)
        self.records.sort(by: { (p1, p2) -> Bool in
            return p1.creationDate.compare(p2.creationDate) == .orderedDescending
        })
        self.tableView?.reloadData()
    })
}) { (err) in
    print ("Faild to fetch records:", err)
 }
}

#2

Немного надо различать понятия. FireBase большой и вы используете его чать - RealtimeDatabase
Насколько помню, при использовании RealtimeDatabase с его JSON деревом вы можете только обрабатывать выгруженные данные на устройстве. При этом при необходимости достать дочерний элемент вы будете вынуждены выгрузить всё родительское дерево. Это и есть здоровенный минус RealtimeDatabase.

Чтобы использовать фильтрованные запросы вам надо использовать БД Cloud Firestore - это тоже элемент Firebase.

upd. хотя в документации есть про фильтрацию данных у Realtime - изучайте


#3

Да, речь идет о RealtimeDatabase. Спасибо за совет


#4

В RealTime всё же можно фильтровать, как выше написал, но Гугл пишет, что это “достаточно затратный” процесс и нужно индексировать нужные запросы на стороне сервера… Сам когда сравнил обе БД, для себя решил, что Firestore явно перспективнее и удобнее в использовании. В том году она была ещё в бетте, в этом вывели из бетты - так что похоже гугл ставит на эту базу в дальнейшем развитии. По RealTime много не подскажу )