查询和改变firebase实时数据库多对多(双向)关系
Posted
技术标签:
【中文标题】查询和改变firebase实时数据库多对多(双向)关系【英文标题】:querying and mutating firebase realtime database many to many (two way) relationships 【发布时间】:2020-03-14 11:27:18 【问题描述】:我一直在阅读文档 https://firebase.google.com/docs/database/web/read-and-write 还有不少网上的例子。但这是断开连接:在向数据库添加对象时,它们似乎都没有考虑从 firebase 随机生成的 id。
根据我的研究,扁平化数据是可行的方法。所以我已经构建了我的数据:
但添加播放器时,例如:
我如何不仅将他添加到玩家对象,还添加到 team_memberships 对象? 然后,团队对象如何知道如何引用 播放器以及在哪里这样做?这是我的客户端代码(javascript (Vue + Typescript)):
addPlayer( state , payload)
const user = firebase.auth().currentUser;
if (user)
firebase
.database()
.ref('users').child(user.uid).child('players')
.push(
firstName: payload.firstName,
lastName: payload.lastName,
jerseyNumber: payload.jerseyNumber,
teamName: payload.teamName
);
,
【问题讨论】:
【参考方案1】:您必须使用update()
方法,该方法允许“一次将多个值写入数据库”(另请参阅here):
这是第一种情况的示例(“我如何不仅将他添加到 player 对象,还添加到 team_memberships 对象”)。
var userObj =
firstName: payload.firstName,
lastName: payload.lastName,
jerseyNumber: payload.jerseyNumber,
teamName: payload.teamName
;
var team_id = '....' //I don't know how you plan to get this value.
var newPlayerKey = firebase.database().ref('users').child(user.uid).child('players').push().key;
var updates = ;
updates['/users/' + user.uid + '/players/' + newPlayerKey] = userObj;
updates['/users/' + user.uid + '/team_memberships/' + team_id + '/' + newPlayerKey] = true;
return firebase.database().ref().update(updates);
注意:我不知道您打算如何获取 team_id
的值,但很可能来自前端,因为您有 teamName
。
【讨论】:
@Khepf 嗨,您有时间查看建议的解决方案吗? 我今天刚回来,这正是我的想法,谢谢!!!以上是关于查询和改变firebase实时数据库多对多(双向)关系的主要内容,如果未能解决你的问题,请参考以下文章