Ios 如果我没有';我不认识两个身份不明的孩子

Ios 如果我没有';我不认识两个身份不明的孩子,ios,firebase,swift3,firebase-realtime-database,Ios,Firebase,Swift3,Firebase Realtime Database,如何访问子成员ID的数据或子“成员”的名称和照片URL? 您可以在图片中看到我的数据库结构。 我试着用queryOrdered和queryEqual,但我只能用一次 我这样做是因为我知道room.key谁是数据库中的“key” let refParticipants = refDatabase.child("markers").queryOrdered(byChild: "key").queryEqual(toValue: room.key) refParticipants.obse

如何访问子成员ID的数据或子“成员”的名称和照片URL? 您可以在图片中看到我的数据库结构。

我试着用queryOrdered和queryEqual,但我只能用一次

我这样做是因为我知道room.key谁是数据库中的“key”

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

我用截图更新我的答案:

我想您是在问如何访问的子节点

/markers/oHQ.../members/9oBKY...
让我们简单介绍一下这个答案的结构

markers
  marker_0
   members
     member_0
       name: "J"
     member)1
       name: "K"
然后是访问members节点中的每个成员并打印其名称的代码

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…),它包含子节点“members”,所以每个members键是什么并不重要,因为您正在对它们进行迭代

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

”。
markers
  oHQa...
    //marker data
marker_members
  member_0
     name: "J"
     member_of: "oHQa..."
  member_1
     name: "K"
     member_of: "oHQa..."
使用此结构,您可以查询任何标记的所有成员,或查询名称为“J”等的所有成员


作为旁注,在问题的结构中,成员id既是键又是子项,这是不必要的。如果它是键,那么您总是可以直接访问该节点而无需查询。

您的问题中包含了JSON树的图片。请将其替换为实际的JSON文本,您可以通过单击中的导出JSON链接轻松获取。将JSON作为文本使其可搜索,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。我尝试过它,但当我打开消息时,会看到这样一条消息:{“error”:“Auth token is expired”}那么,你想检查某个特定用户是哪些房间的成员吗?我想在tableView中显示房间中的所有成员,除了创建此房间的用户,创建标记并将其放在地图上的人是同一个人我会尝试,但如何增加成员数,首先是成员0,然后如果我想要第二个是成员1,怎么做?谢谢你的支持answer@GhiggzPikkorosnapshot.children中的子对象的for循环为您执行此操作。它将迭代成员快照中的所有子成员,即它将一次处理成员中的每个子成员并打印名称。好的,我这样做了,谢谢Jay,但最后一个问题是,如果我不知道成员的编号,我如何在他离开房间时删除成员1?因为如果有很多会员,我不知道哪一个是会员1或会员2等@GhiggzPikkoro你的应用程序会知道!通常的做法是迭代每个节点,并将每个成员的数据存储在类数组中。一个类将包含成员名,可能是一个缩略图,最重要的是它们的节点的键。在我的示例中,键是member_0,member_1。如果密钥是使用childByAutoId创建的,那么它将是那些id的任何内容。总的来说,id并不重要-当一个成员退出一个房间时,他们的密钥将存储在一个数组中,因此您可以获取该密钥和memberRef.delete(密钥)以将其从实际的Firebase节点中删除。好的,也许您可以向我展示一段代码,说明如何做到这一点?