获取firebase中用户所属组的详细信息
下面是我在firebase中的数据库结构。我只登录了用户Id 使用者 团体 我想列出用户所属的所有组的详细信息。 我的做法是,获取firebase中用户所属组的详细信息,firebase,firebase-realtime-database,many-to-many,nosql,Firebase,Firebase Realtime Database,Many To Many,Nosql,下面是我在firebase中的数据库结构。我只登录了用户Id 使用者 团体 我想列出用户所属的所有组的详细信息。 我的做法是, 通过检查来自用户的索引,查找我的用户所属的所有组 使用我们从步骤1获得的groupid列表,从Groups中获取组的详细信息 还有其他更好的建议吗?根据您当前的数据结构,您确实需要采用两步方法: 加载组ID列表 加载每个组的元数据(例如名称) 这称为客户端连接,在Firebase中非常常见 或者,您可以在每个用户的组下复制关于每个组的最重要信息。例如 UserGroup
还有其他更好的建议吗?根据您当前的数据结构,您确实需要采用两步方法:
UserGroups
User1
Group1: "This is the first group"
Group2: "This is the second group"
正如您在本示例中看到的,我们已将true
标记替换为组的实际名称。这样做的好处是,对于一个简单的用例,您只需阅读此列表,而不必进行客户端连接。缺点是您需要决定是否/如何保持数据同步。我在这里写了一个带有选项的答案:
请注意,您的数据模型并没有完全展平,因为您混合了实体类型。我建议将每个用户的元数据(他们的名称和描述)从“用户所属的组列表”中分离出来。这将为您留下四个顶级列表:
Users
Groups
UserGroups
GroupUsers
这是多对多关系的常见模式,我在这里进一步描述了它:下面的方法将检索用户所属的组详细信息
self.usersPerGroupRef = [_rootRef child:@"Group"];
[_usersPerGroupRef observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
self.usersArray = [NSMutableArray new];
for (snapshot in snapshot.children) {
NSMutableDictionary *groupDict = [NSMutableDictionary new];
groupDict = snapshot.value[@"UserId"];
if ([groupDict objectForKey:@"userID"]) {
NSLog(@"Group Name: %@",snapshot.value[@"name"]);
[self.usersArray addObject:snapshot.key];
}
}
}];
我认为这是最好的解决方案,因为我的应用程序每次更改时都需要更新组信息,我更喜欢使用第一种方法,即执行两步检索。通过执行上述方法,我遇到了一个showstopper。是否有人可以就此问题提供任何建议
Users
Groups
UserGroups
GroupUsers
self.usersPerGroupRef = [_rootRef child:@"Group"];
[_usersPerGroupRef observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
self.usersArray = [NSMutableArray new];
for (snapshot in snapshot.children) {
NSMutableDictionary *groupDict = [NSMutableDictionary new];
groupDict = snapshot.value[@"UserId"];
if ([groupDict objectForKey:@"userID"]) {
NSLog(@"Group Name: %@",snapshot.value[@"name"]);
[self.usersArray addObject:snapshot.key];
}
}
}];