我已经看过how to retrieve multiple data in one query firebase所以这可能是一个类似的问题,但我是Firebase的新手并且我没有正确使用它。
以下是我的情况:
我有一个像这样的Firebase数据库:
我想检索参与特定活动的用户
的修改
我试过吼叫,
Firebase* childrens = [server childByAppendingPath:@"Users"];
Firebase* firebaseUser = [childrens childByAppendingPath:self.myuserid];
Firebase* firebaseEvent = [firebaseUser childByAppendingPath:@"Events"];
Firebase* fbuser= [firebaseEvent childByAppendingPath:@"Created"];
FQuery* query1 = [fbuser queryOrderedByChild:@"id"];
handleFirebase = [query1 observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot){
NSEnumerator* childrens = snapshot.children;
[childrens.allObjects enumerateObjectsUsingBlock:^(FDataSnapshot* rootSnap,NSUInteger rootIndex,BOOL* rootStop){
NSDictionary* rootData = rootSnap.value;
NSString* rootKey = rootSnap.key;
NSLog(@"\nRootKey: %@\nRootData: %@",rootKey,rootData);
}];
这是NSLog
2016-03-10 15:27:23.399 SquadApp[4425:110128]
RootKey: olbuzevent1
RootData: {
createdTime = "2016-03-08T11:53:33Z";
name = "OLBUZ event 1";
participents = {
"335e63c9-46c6-4ff8-99e7-1537d99731f7" = {
id = "335e63c9-46c6-4ff8-99e7-1537d99731f7";
joinnedTime = 0;
};
};
}
2016-03-10 15:27:24.150 SquadApp[4425:110128]
RootKey: olbuzevent2
RootData: {
createdTime = "2016-03-08T12:23:28Z";
name = "OLBUZ event 2";
participents = {
"335e63c9-46c6-4ff8-99e7-1537d99731f7" = {
id = "335e63c9-46c6-4ff8-99e7-1537d99731f7";
joinnedTime = 0;
};
};
}
答案 0 :(得分:1)
在NoSQL数据库中,您经常需要为数据建模,以便在应用程序中使用它。您当前的结构非常适合显示用户组织/参与的事件列表。如果这是您的一个用例,那就太棒了。
但是,如果您还有一个用例来显示参与某个活动的所有用户,那么您可能需要添加一个跟踪该数据结构的数据结构。
event_users
eventid1
uid1: 'participant'
uid2: 'organizer'
uid3: 'participant'
此过程称为非规范化,并在我们(相当陈旧的)blog posts和documentation on structuring data之一中进行了介绍。在最后一页中,您可能还应阅读recommendation on nesting。