Firebase如果我不知道有两个未知ID的孩子,请访问孩子

时间:2018-01-03 17:41:02

标签: ios firebase swift3 firebase-realtime-database

如何访问子“member”的子memberid或者姓名和photoURL的数据? 您可以在图像中看到我的数据库的结构。 enter image description here

enter image description here

我尝试使用queryOrdered和queryEqual,但我只能使用它一次

我试过这样,因为我知道room.key是数据库中的“关键”。

let refParticipants = refDatabase.child("markers").queryOrdered(byChild: "key").queryEqual(toValue: room.key)
    refParticipants.observe(.childAdded, with: { snapshot in
...
}

我使用Swift 3.1

我用截图更新了我的答案: enter image description here

1 个答案:

答案 0 :(得分:0)

我想您正在询问如何访问

的子节点
/markers/oHQ.../members/9oBKY...

让我们简单介绍一下这个答案的结构

markers
  marker_0
   members
     member_0
       name: "J"
     member)1
       name: "K"

然后代码将访问成员节点中的每个成员并打印其名称

let markersRef = self.ref.child("markers")
let marker0Ref = markersRef.child("marker_0")
let membersRef = marker0Ref.child("members")
membersRef.observeSingleEvent(of: .value, with: { snapshot in
    for child in snapshot.children {
        let snap = child as! DataSnapshot
        let dict = snap.value as! [String: Any]
        let name = dict["name"] as! String
        print(name)
    }
})

,输出将是

J
K

由于您知道父节点(oHQa ...),其中包含子节点'成员'因为您正在迭代,因此每个成员键的内容并不重要。它们。

但是,如果您想查询某些成员或其他成员数据,您可能需要考虑将数据库扁平化有点像这样

markers
  oHQa...
    //marker data
marker_members
  member_0
     name: "J"
     member_of: "oHQa..."
  member_1
     name: "K"
     member_of: "oHQa..."

使用此结构,您可以查询名称为" J"的所有成员的任何标记或查询的所有成员。等

作为旁注,在问题的结构中,您将member_id既作为键,也作为不必要的子项。如果它是密钥,那么您始终可以直接访问该节点而无需查询。