Запросите базу данных реального времени firebase, где у ребенка есть свойство - PullRequest
1 голос
/ 28 апреля 2020

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

У меня есть список games, каждая игра имеет свойство players. У каждого ребенка players есть ключ $uid, и в пределах этого {key: $uid, name: "joe"}

Возможно ли получить все игры таким образом? Или мне нужно начать сохранять другой индекс players_games/$uid/$game?

Я пробовал firebase.database().ref('games').orderByChild('players').equalTo(token.uid), но это дает null

Похоже, database.ref('games').orderByChild('players/${token.uid}') работает, но потом Мне нужно дать .read доступ ко всем games или сделать это на стороне сервера.

tree

1 Ответ

3 голосов
/ 28 апреля 2020

Ваша текущая структура данных позволяет легко найти всех пользователей для конкретной c игры. Однако это не позволяет легко найти все игры для определенного пользователя c. Чтобы разрешить это, вы захотите добавить дополнительную структуру данных, которая инвертирует информацию.

Так это будет выглядеть примерно так:

player_games: {
  "XDYNyN8il6TDsM4LuttwDzNuytj1": {
    "-M5vf...U5zK": true
  },
  "NxH14...mxY2": {
    "-M5vf...U5zK": true
  }
}

Также см .:


Рекомендую Вы также изучаете документацию Firebase по структурированию вашей базы данных , в частности, по , избегая вложенных данных . Смешивая типы сущностей, как вы это делаете в настоящее время, вы, скорее всего, столкнетесь с проблемами безопасности и масштабируемости.

Самый идиоматический c способ моделирования отношений «многие ко многим» в базе данных Firebase - это четыре списка верхнего уровня:

players: {
  $playerId: { ... }
}
games: {
  $gameId: { ... }
}
player_games: {
  $playerId: {
    $gameId: true
  }
}
game_players: {
  $gameId: {
    $playerId: true
  }
}

Также см .:

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