Нужна помощь в создании сложного запроса с использованием вложенных списков из базы данных Firebase - PullRequest
0 голосов
/ 21 мая 2019

У меня есть сложный сценарий для получения данных из таблицы, которая содержит несколько подсписков и которые также зависят друг от друга при использовании базы данных firebase. Я пытаюсь получить данные из таблиц лиг, в которых есть список GameResults, и я хочу показать все GameResults, но в GameResults есть ссылка, если DivisonID с именем «Game», а также я хочу показать StartDate из списка GameSchedule, который также проживать в таблице лиги. Я не эксперт по пожарной базе, поэтому запутался. Изображение структуры базы данных прилагается:

Я занимаюсь разработкой в ​​реагировать нативно, используя firebase в качестве базы данных и получаю эту проблему. Вот код, который я пробовал раньше.

await firebase
      .database()
      .ref('/Leagues/' + League_ID + '/GameResults')
      .on('child_added', snapshot => {
        const collection = snapshot.val();
        if (collection) {
          var objGameResults = null;
          const TeamIDsList = [];
          var matchdate = null;
          TeamIDsList.push(collection.TeamA);
          TeamIDsList.push(collection.TeamB);
          const LeaguePromises = TeamIDsList.map(TeamID => {
            return firebase
              .database()
              .ref()
              .child('Teams')
              .orderByKey()
              .equalTo(TeamID)
              .once('value', snapshot => snapshot);
          });
          Promise.all(LeaguePromises)
            .then(Teams => {
              Teams.forEach(singleObject => {
                var TList = JSON.stringify(singleObject);
                if (TList) {
                  var Team_List = JSON.parse(TList);
                  Object.keys(Team_List).forEach(key => {
                    if (key == collection.WinnerTeam) {
                      Team1Name = Team_List[key].TeamName;
                    } else {
                      Team2Name = Team_List[key].TeamName;
                    }
                  });
                }
              });
              GameResults.push({
                Scoredate: matchdate, //matchdate,
                ScoreData: {
                  winnerTeam: {
                    label: Team1Name,
                    value: 123,
                    division: 'South Division',
                    ps: collection.TeamAScore,
                  },
                  loserTeam: {
                    label: Team2Name,
                    value: 123,
                    division: 'South Division',
                    ps: collection.TeamBScore,
                  },
                },
              });

              this.setState({
                GameResults,
                isLoading: false,
              });
              // do something with the data
            })
            .catch(err => {
              // handle error
              this.setState({ isLoading: false });
            });
        }
      });


await firebase
      .database()
      .ref('/Leagues/' + League_ID + '/GameResults')
      .on('child_added', snapshot => {
        const collection = snapshot.val();
        if (collection) {
          var objGameResults = null;
          const TeamIDsList = [];
          var matchdate = null;
          TeamIDsList.push(collection.TeamA);
          TeamIDsList.push(collection.TeamB);
          const LeaguePromises = TeamIDsList.map(TeamID => {
            return firebase
              .database()
              .ref()
              .child('Teams')
              .orderByKey()
              .equalTo(TeamID)
              .once('value', snapshot => snapshot);
          });
          Promise.all(LeaguePromises)
            .then(Teams => {
              Teams.forEach(singleObject => {
                var TList = JSON.stringify(singleObject);
                if (TList) {
                  var Team_List = JSON.parse(TList);
                  Object.keys(Team_List).forEach(key => {
                    if (key == collection.WinnerTeam) {
                      Team1Name = Team_List[key].TeamName;
                    } else {
                      Team2Name = Team_List[key].TeamName;
                    }
                  });
                }
              });
              GameResults.push({
                Scoredate: matchdate, //matchdate,
                ScoreData: {
                  winnerTeam: {
                    label: Team1Name,
                    value: 123,
                    division: 'South Division',
                    ps: collection.TeamAScore,
                  },
                  loserTeam: {
                    label: Team2Name,
                    value: 123,
                    division: 'South Division',
                    ps: collection.TeamBScore,
                  },
                },
              });

              this.setState({
                GameResults,
                isLoading: false,
              });
              // do something with the data
            })
            .catch(err => {
              // handle error
              this.setState({ isLoading: false });
            });
        }
      });

Результаты не соответствуют ожидаемым, потому что я не могу написать правильный запрос

...