我正在尝试查询Firebase实时数据库以查找用户所属的所有游戏。
我有一个列表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
,或者在服务器端进行访问。
您当前的数据结构使查找特定游戏的所有用户变得容易。但是,这并不容易找到特定用户的所有游戏。为此,您需要添加一个附加数据结构来反转信息。
所以看起来像这样:
player_games: {
"XDYNyN8il6TDsM4LuttwDzNuytj1": {
"-M5vf...U5zK": true
},
"NxH14...mxY2": {
"-M5vf...U5zK": true
}
}
另请参阅:
我建议您还学习有关构建数据库的Firebase文档,特别是有关避免嵌套数据的部分。通过像现在这样混合实体类型,您可能会遇到安全性和可伸缩性问题。
在Firebase数据库中建模多对多关系的最惯用的方法是使用四个顶级列表:
players: {
$playerId: { ... }
}
games: {
$gameId: { ... }
}
player_games: {
$playerId: {
$gameId: true
}
}
game_players: {
$gameId: {
$playerId: true
}
}
另请参阅:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句