按子值的子搜索firebase

时间:2017-02-11 05:36:12

标签: database firebase firebase-realtime-database

我有一个类似于

的firebase数据库结构

enter image description here

是否可以通过电子邮件地址查询" a@a.com"并检索两个键" 1248769d7j8"以及它的父母" deaf7834jd8d7j-78" ?

我的解决方案是使数据库结构更平坦。但我想知道是否有可能在没有非规范化的情况下顺利通过

更新:在我的情况下,124 ...和dea ...都是未知的唯一ID

1 个答案:

答案 0 :(得分:4)

  

编辑:答案最初是,但是,更新的信息   从OP,父节点'聋......'和子节点'1248 ...'   都是未知数,所以没有办法进行深层次的查询。

     

如果子节点“1248”与聋人节点的每个子节点的密钥一致,那么答案是肯定的。

是的,您当然可以获得父节点以及父节点的父节点。这是Swift,因为没有指定平台,但概念是全面的。

给定结构

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

让我们通过深层查询查询Leroy节点:

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: "asad@asdd.com"
     name: "Adam"
     parent_node: "1248"
     parent_parent: "deaf91298823"