2017-02-11 78 views
2

我有類似這樣搜索由子值的兒童

enter image description here

一個火力點的數據庫結構火力是否有可能通過電子郵件地址來查詢說「[email protected]」並獲取這兩個鍵「1248769d7j8」以及它的父母「deaf7834jd8d7j-78」?

我的解決方案是讓數據庫結構更平坦。但我想,如果有可能,而不非規範化度日

更新:在我的情況下,兩個124 ......與DEA ......是未知的,唯一的ID

+1

不,這是不可能的。你可以在孩子排序時指定深度路徑(例如'some/deep/property')和定義索引時,但所述路徑的組成部分需要是已知名稱(可以這麼說),並且「1248769d7j8」似乎是一個ID不知道什麼時候你會定義安全規則(爲索引)等 – cartant

+0

謝謝,我認爲是這樣。將創建數據庫的不同分支 – sera

+0

@cartant請看到答案,因爲這很容易做到。 – Jay

回答

3

編輯:答案是首先是,然而,來自OP的更新信息 ,父節點'聾子'和子節點'1248 ...' 都是未知數,因此無法構建深層查詢。

如果子節點'1248'作爲失聰節點的每個子節點的關鍵字一致,那麼答案是肯定的。

是的,你當然可以得到父節點以及父母的父母。這是Swift,因爲沒有指定平臺,但概念是一致的。

給定結構

root 
    posts 
    post_1 
     details 
     posted_by: "Leroy" 
    post_2 
     details 
     posted_by: "Bill" 

讓我們做了樂華節點查詢通過深查詢:

let postsRef = ref.child("posts") 

let queryRef = dataRef.queryOrdered(byChild: "details/posted_by") 
         .queryEqual(toValue: "Leroy") 
queryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
    let a = snapshot.key //the posts node 
    print(a) 

    for child in snapshot.children { 
     let childSnap = child as! FIRDataSnapshot   
     print(childSnap.key) //the direct parent node 
    } 
}) 

,結果會打印

posts 
post_1 

另一種選擇是包含像這樣的低層節點中的父節點

root 
    deaf91298823 
    1248 
    email: "[email protected]" 
    name: "Adam" 
    parent_node: "1248" 
    parent_parent: "deaf91298823" 
+0

對於處於類似窘境的人來說,這是一個很好的答案。然而,就我而言,我不能'let postsRef = ref.child(「posts」)'因爲帖子是未知的唯一ID。更新我的問題以澄清。 – sera