Firebase简单多对多关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase简单多对多关系相关的知识,希望对你有一定的参考价值。
我对NoSQL和Firebase实时数据库有点熟悉,而且我知道它不是解决关系数据库应该更合适的任务的最佳解决方案。我想验证我所拥有的简单多对多关系的结构。
我有活动和用户。我想使用Firebase存储有关参与活动的用户的信息,稍后我将需要
- 获取事件的用户列表,了解它的id和城市
- 获取知道它的id和城市的用户的事件列表
- 添加或删除有关用户参加活动的信息
我希望第一棵事件ids被城市划分。
events {
'city1' : {
event_id_1 : {'user_1', 'user_2'},
event_id_2 : {'user_3', 'user_4'}.
}
'city2' : {
event_id_3 : {'user_5', 'user_6'},
event_id_4 : {'user_7', 'user_7'}.
}
}
用户的第二棵树
users {
'user1' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
'user2' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
'user3' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
}
使用和维护是否容易和快速?
答案
鉴于列出的要求,您的结构看起来很不错。最重要的是:您已经将数据存储在两个方向上,这是许多新手NoSQL数据建模的最大障碍。
关于您的数据模型的一些注释,尽管大多数都是在拼写错误的级别:
- 确保将数据存储为映射,而不是数组。所以
event_id_1 : {'user_1': true, 'user_2': true }
- 如果用户和事件之间存在多对多的关系,我通常会有四个顶级列表:
users
和events
(关于每个的主要信息),然后是userEvents
和eventUsers
(用于两者之间的连接) 。
将用户添加到事件可以通过单个多位置更新来完成,例如:
ref.update({
'/userEvents/userId1/eventId1': true,
'/eventUsers/eventId1/userId1': true
});
取消注册它们就像使用null
作为值(删除现有密钥)一样:
ref.update({
'/userEvents/userId1/eventId1': null,
'/eventUsers/eventId1/userId1': null
});
另见我的答案:Many to Many relationship in Firebase
另一答案
你可以这样做:
用户列表
Users
useruid
name:userx
email:userx@gmail.com
useruid
name:usery
email:usery@gmail.com
Events
eventid
useruid
name:userx
location: city1
eventname: party
eventid2
useruid1
name:usery
location: city2
eventname: Boring Party
获取知道其身份和城市的活动的用户列表:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Events").child(eventid);
ref.orderByChild("location").equalTo(city1);
//retrieve users using a listener
获取知道其ID和城市的用户的事件列表:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Events");
Query q=ref.orderByChild("location").equalTo(city1);
使用监听器,这可以为您提供location:city1
中的事件
以上是关于Firebase简单多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
我可以通过哪些方法正确地在 Firebase Firestore 中的数据结构来建模多对多关系以检索 vue js 中的特定 uid