Глубокий запрос Firebase в Swift с 3 неизвестными именами узлов эталонного пути - возможно ли это? - PullRequest
0 голосов
/ 22 сентября 2019

У меня было несколько сотен игроков, играющих в созданную мной игру, и счет каждой команды находится по этому пути в структуре моей базы:

myref.firebaseio.com / UK / дата здесь / Турниры / время здесь / имя игрока здесь / Итоговый счет

Последний ключ - «Окончательный счет», за которым следует значение команды в качестве значения.

Проблема в том, что дата здесь , время здесь и имя игрока здесь узлы различаются в зависимости от дня и времени, когда была сыграна игра, и имени, которое выбрал игрок.

Я хочу просто извлечь каждый счет из всех игроков и добавить ихв массиве, чтобы вычислить среднее значение.

Я ищу способ сообщить запросу "найди мне ключ" Final Score ", несколько подузлов вниз, 3 из них с неизвестнымимена, и получите мне значение. Сделайте это для всех записей в базе данных "

Мне удалось пройти 1 уровень Доуn с неизвестным путем, но не более 1 уровня.

Чтение о глубоких запросах мне не помогло.Возможно ли это сделать, или мне придется изменить структуру базы данных, чтобы добиться этого?

Заранее благодарен за любую помощь

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

В базе данных Firebase Realtime запрос может содержать только один неизвестный уровень.Другими словами, запрос выполняет операции над списком узлов, а не над деревом узлов.Если у вас есть несколько вложенных уровней, вам нужно будет найти другой способ поиска.Это может быть либо на стороне клиента (для небольших наборов данных), либо путем сохранения плоского списка с информацией, которую вы хотите запросить.

В вашем случае последний будет представлять собой единый список значений «окончательной оценки», независимо от их даты и времени.

См. Также:

1 голос
/ 22 сентября 2019

Вам нужно сделать цикл по всем неизвестным значениям, чтобы получить финальный балл .. как-то так

 ref.child("UK").observeSingleEvent(of: .value) { (snap) in
            let dates  = snap.children.allObjects as! [DataSnapshot]
            for date in dates{ // To get all Unknown dates
                let tournmentSnap = date.childSnapshot(forPath: "Tournaments").children.allObjects as! [DataSnapshot]
                for unkownTime in tournmentSnap{  // To get all Unknown Time
                    let playerSnap = unkownTime.children.allObjects as! [DataSnapshot]
                    for play in playerSnap{ // To get all Unknown Players
                        print(play.value) // Final Score
                    }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...