2017-01-09 103 views
0

對不起Firebase的新手。這裏是我的示例數據庫。在Firebase數據庫中查找對象

{ 
    groups:{ 
    #groupid:{ 
     members:{ 
     #userid: 
     } 
     name: 
    } 
    } 
} 

enter image description here

我試圖找到用戶的組。我能夠得到的數據,當我和組名搜索:

let lRef = FIRDatabase.database().referenceWithPath("groups") 
    lRef.queryOrderedByChild("name").queryEqualToValue("one").observeSingleEventOfType(.Value, withBlock: { snapshot in 
     print("hello world \(snapshot.value)") 
    }) 

但我不能夠得到,當我與會員用戶名搜索。有人請幫我完成這件事。

+0

我不立即明白爲什麼查詢不起作用,所以希望別人發現它。但是您肯定會嵌套不同類型的數據,這是Firebase建議的。我建議創建兩個頂級節點'/ groups/$ groupid'和'/ members/$ groupid',然後拆分它們之間相同的數據。它不會解決你的查詢問題,但它會阻止許多未來的麻煩。 –

回答

1

這是一個嵌套數據的完美例子。

Google對此主題提供了很好的documentation。他們建議避免這種情況。

這裏引用:

避免嵌套數據

因爲火力地堡實時數據庫允許嵌套數據32層深,你也許會認爲這應該是默認的結構體。但是,當您在數據庫中某個位置獲取數據時,還可以檢索其所有子節點。另外,當您授予某人讀取或寫入數據庫中某個節點的訪問權限時,您還授予他們訪問該節點下的所有數據的權限。因此,在實踐中,最好保持數據結構儘可能平坦。

你可能會在你的數據庫中有用戶元數據的另一個節點。該用戶節點應該有一個包含用戶所在組的孩子。這樣,您很容易就能看到用戶在哪個組中。

如果我是正確的,這正是你正在努力實現。

您的數據庫會/應該是這個樣子:

{ 
    groups: { 
    #groupid01: { 
     members: { 
     #userid: true, 
     } 
     name: #groupname01 
    }, 
    #groupid02: { 
     members: { 
     } 
     name: #groupname02 
    } 
    }, 
    users: { 
    #userid01: { 
     groups: { 
     #groupid01: true, 
     #groupid02: true 
     } 
    }, 
    #userid02: { 
     groups: { 
     } 
    }, 
    ...: {}, 
    } 
} 

希望這有助於!