2016-03-04 88 views
0

我有这样的JSON结构:火力地堡如何使这种查询斯威夫特

{ 

    "groups" : { 
    "-KBxo9-RoY0eowWKeHkU" : { 
     "author" : "rsenov", 
     "members" : { 
     "-KBxo7ZU6McsmDOxyias" : true, 
     "-KBxo8_TUTW6NZze6xcd" : true, 
     "rsenov" : true 
     }, 
     "name" : "Prueba 3" 
    } 
    }, 
    "users" : { 
    "-KBxo7ZU6McsmDOxyias" : { 
     "avatar" : "owl2", 
     "groups" : { 
     "-KBxo9-RoY0eowWKeHkU" : true 
     }, 
     "isUser" : false, 
     "name" : "Pepa" 
    }, 
    "-KBxo8_TUTW6NZze6xcd" : { 
     "avatar" : "monkey", 
     "groups" : { 
     "-KBxo9-RoY0eowWKeHkU" : true 
     }, 
     "isUser" : false, 
     "name" : "Lolas" 
    }, 
    "rsenov" : { 
     "avatar" : "guest", 
     "groups" : { 
     "-KBxo9-RoY0eowWKeHkU" : true 
     }, 
     "isUser" : true, 
     "name" : "Ruben", 
    } 
    } 
} 

和安全&规则文件是:

{ 
    "rules": { 
    ".read": true, 
    ".write": true, 
    "users": { 
     ".indexOn": ["email", "groups"] 
    }, 
    "groups": { 
     ".indexOn": ["author", "name"] 
    } 
    } 
} 

我试图运行一个查询为了得到ChildChanged快照:

DataService.dataService.USERS_REF.queryOrderedByChild("groups").queryEqualToValue(currentGroup.groupKey).observeEventType(.ChildChanged, withBlock: {snapshot in 
     print(snapshot) 
    }) 

DataService.dataService.USERS_REF与URL对应的是点读笔o在这种情况下,“用户”键和currentGroup.groupKey等于-KBxo9-RoY0eowWKeHkU

根据这个查询,我应该得到的是改变了孩子的快照。例如,如果我更换用户名“佩帕”,以“测试”,我应该得到的快照:

"-KBxo7ZU6McsmDOxyias" : { 
    "avatar" : "owl2", 
    "groups" : { 
    "-KBxo9-RoY0eowWKeHkU" : true 
    }, 
    "isUser" : false, 
    "name" : "Test" 
} 

但此查询永远得不到的叫做... 有什么错我的查询?

+0

@FrankvanPuffelen想过这事?将不胜感激 – Ruben

回答

0

“我想,以获得ChildChanged快照运行一个查询:”是有点古怪。

您可以查询数据,或通过ChildChanged观察节点。

如果你只是想通知用户节点内的变化,观察者添加到该节点时佩帕变化来测试您的应用会得到通知,并提供更改用户节点的快照。

var ref = Firebase(DataService.dataService.USERS_REF) 

ref.observeEventType(.ChildChanged, withBlock: { snapshot in 
    println("the changed user is: \(snapshot.value)") 
}) 

哦,并且不需要queryOrderedByChild,因为快照将只包含更改的单个节点。

+0

感谢您的回答。我知道有可能观察USERS_REF中发生变化的节点,但问题是在不同设备上会有很多用户进行更改,并且我不希望每个用户在USERS_REF中发生更改时都收到通知,那些关心他们的用户和团体的人。这就是为什么不知何故,我必须只得到孩子改变属于喜欢的东西'DataService.dataService.USERS_REF.queryOrderedByChild(“集团”)的特定组的用户。queryEqualToValue(currentGroup.groupKey)' – Ruben

+0

我看。非常简单的解决方案:查询组中的所有用户,然后将观察者添加到这些用户节点。 – Jay

+0

或...并检查:创建一个组节点,并在该节点中有一个组列表,每个组包含引用回用户节点的子节点(user_d's)。/groups/some_group_name/uid_0:用户名。然后每个用户只能观察他们的组节点,并且当用户名改变时,他们将被通知。 – Jay

相关问题