2016-03-04 296 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

相關問題