【问题标题】:Query child snapshot of unknown parent firebase查询未知父firebase的子快照
【发布时间】:2019-07-18 09:33:33
【问题描述】:

我正在尝试使用未知父级的 childKey 获取子级快照,而不更改数据结构。

我尝试将queryOrderByChildIdqueryEqual(toValue:, childKey:) 一起使用,但我的问题是子快照是字典,我只知道键,不知道值。

有什么方法可以将值操作为 Any 值,以便我能够获取子快照。

我知道title/id1、id3和id3的时间戳

数据结构:

title:
    id1:
         id2:
              id3:
                   timestamp: 101010101
                   visible: true

代码:

ref.child("title").child(id1).queryOrderedByKey().queryEqual(toValue: _, childKey: id3)
   .observeSingleEvent(of: .value) { (snapshot) in
      print(snapshot)
}

输出值为空

编辑:

最后我这样解决了:

ref.child("title").child("id1").queryOrdered(byChild: "id3/timestamp").queryEqual(toValue: 101010101).observeSingleEvent(of: .value) { (snapshot) in
       print("id2 is: ", (snapshot.value as? [String: Any])?.keys.first)
}

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    Firebase 数据库查询在您运行查询的位置的直接子节点上运行。整个路径中只能有一个未知键:您查询的节点正下方的节点。

    因此,如果您知道路径的title/id1 部分,则可以根据其下已知路径(如date/month)处的键、值或属性查询级别id2 上的节点。

    如果知道title/id1/id2,可以查询id3级别的节点。但是你不能查询那些,如果你只知道他们路径的title/id1 部分。

    另见:

    【讨论】:

    • 好的,谢谢,假设我知道 title/id1、id3 和 id3 的时间戳,我的查询应该是什么样子才能获得 id3 datasnapshot.value? @坦率
    • 如前所述:查询中只能有一个未知级别。如果你只知道title/id1,那么你是在尝试查询title/id1/*/*/timestamp,这是不可能的。
    • 正如我提到的,我也知道 id3 的值 和时间戳的值。这有帮助吗?我知道title/id1/*/id3/timestamp@frank
    • 我不知道只有 id2 @Frank 的值
    • 如果id3/timestamp 是固定路径,您可以在id1 下为其创建索引,并以这种方式查询。但是如果id3 对于许多子节点来说是不同的,那就是分类问题。在这种情况下,请检查我对链接的第二个问题的回答。请注意,如果您不使用id1id2id3 将问题抽象化,而是显示实际值及其含义,则更容易理解您正在尝试的内容以及如何完成。
    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多