使用swift在firebase中搜索子级

使用swift在firebase中搜索子级,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,这应该很容易,有很多类似的问题,但没有什么适合我 这是我的代码,应该打印快照,但不打印 override func viewDidLoad() { super.viewDidLoad() let Ref = Database.database().reference(withPath: "Exhibitors-List/join").queryOrdered(byChild: "joinID").queryEqual(toValue:"1-22") re

这应该很容易,有很多类似的问题,但没有什么适合我

这是我的代码,应该打印快照,但不打印

  override func viewDidLoad() {
      super.viewDidLoad()


     let Ref = Database.database().reference(withPath: "Exhibitors-List/join").queryOrdered(byChild: "joinID").queryEqual(toValue:"1-22")

    ref.observe(.value, with: {
      snapshot in
      var newItems: [Exhibitors] = []

      for item in snapshot.children{
        print(snapshot.value as Any)
        let joinItem = Exhibitors(snapshot: item as! DataSnapshot)
        newItems.append(joinItem)
      }

      self.items = newItems
      self.tableView.reloadData()

    })
  }

在idComp或boothLocation中搜索一个孩子而不是在joinID中搜索时,我没有问题获取快照,那么这是我的代码还是我的Firebase结构关闭了?

您的代码要求查询位置
参展商列表/加入
,但您的数据库中不存在该位置。就我所见,还有另一个节点
0
,位于
参展商列表
和最近的
加入
子节点之间。查询时不能跳过元素-您需要在完全存在的路径上进行查询。

在某个位置运行查询时,Firebase会检查该位置的每个子级,以查找您订购的属性。
参展商列表/加入
中没有数据,因此查询不会给出任何结果

相反,您要做的是在
参展商列表上运行查询,然后在
加入/joinID/0
上排序/筛选:

 let Ref = Database.database().reference(withPath: "Exhibitors-List/join").queryOrdered(byChild: "joinID/0").queryEqual(toValue:"1-22")
这将起作用,但前提是您在索引
0
中拥有所需的joinId

实际上,您要做的是在这里进行反向查找。您当前的数据结构有助于查找给定参展商的加入ID。这不利于找到现有参展商的加盟ID。为了有效实现这一点,您需要创建一个额外的数据结构:

joinIds: {
  joinId1: {
    exhibitorId1: true,
    exhibitorId2: true
  },
  joinId2: {
    exhibitorId2: true
  }
}
使用此附加结构,您可以从
/joinIds/1-22
快速查找参展商ID

另请参见我的解释:


}

您好,其他工作有问题,回答得很好,先生们。你告诉我,我的数据库结构已经关闭,我的孩子搜索也已经停止。根据你的建议,我解决了我的问题。我将为未来的观众和你们自己的专家们做演讲。首先,让我谈谈Frank关于创建附加数据结构的建议。我确实有一个现有的数据结构,但是谷歌在上面显示的加入列表结构上说“只读模式激活”,我觉得因为有超过40K个加入,我的JSON树效率很低。下一步,加入代表一个参展商类别和子类别。所以我提出了我们几天前讨论过的方案。现在我用你的答案让它工作了。新结构见。和新的swift代码,感谢您的帮助。。。。。。。。let textj=“join/”let text=textj+detailNamer!打印(“在exsubvie详细信息名称(文本)”中)让Ref=Database.Database().reference(withPath:“参展商列表”).queryOrdered(byChild:text)。queryQual(toValue:1)Ref.observe(.value,with:{snapshot indetailNamer是一个来自上一个表视图的变量,如“1-22”。
 override func viewDidLoad() {
   super.viewDidLoad()

   let textj = "join/"
   let text =  textj + detailNamer!


   let Ref = Database.database().reference(withPath: "Exhibitors-   List").queryOrdered(byChild:text).queryEqual(toValue:1)

Ref.observe(.value, with: {
  snapshot in
  var newItems: [Exhibitors] = []

  for item in snapshot.children{
    print(snapshot.value as Any)
    let joinItem = Exhibitors(snapshot: item as! DataSnapshot)
    newItems.append(joinItem)
  }

  self.items = newItems
  self.tableView.reloadData()

})