【问题标题】:Firebase retrieving child nested dataFirebase 检索子嵌套数据
【发布时间】:2020-05-20 19:40:26
【问题描述】:

我想用这个值7hmpcTuCAYQAYRqP7RNmnegSd9r2检索数据

但我正在快照中获取所有四个对象。我想获取包含此键的父键值 7hmpcTuCAYQAYRqP7RNmnegSd9r2 需要获得蓝色标记键。

这是我的代码

     let ref = FirebaseManager.refs.databaseRoot.child("new_ChatListMembers")
    ref.queryOrdered(byChild: (Auth.auth().currentUser?.uid)!).queryEqual(toValue: true)
    ref.observeSingleEvent(of: .value) { (snapshot) in
        print(snapshot)
    }

此代码返回四个对象而不是两个。请帮助我如何获取特定数据。 谢谢

【问题讨论】:

    标签: ios swift firebase-realtime-database


    【解决方案1】:

    您实际上并没有使用您在代码中构建的查询。要使用它,它会是这样的:

    let ref = FirebaseManager.refs.databaseRoot.child("new_ChatListMembers")
    let query = ref.queryOrdered(byChild: (Auth.auth().currentUser?.uid)!).queryEqual(toValue: true)
    query.observeSingleEvent(of: .value) { (snapshot) in
        print(snapshot)
    }
    

    但这实际上不会很好地扩展,因为您需要为该结构中的每个单独的 UID 值定义一个索引。简而言之:您当前的数据结构使得每个人都可以找到特定聊天室的用户,但它无助于找到特定用户的聊天室。

    要允许后者,您需要在数据中添加一个额外的结构:

    user_chats: {
      "$uid": {
        "$chatid": true
      }
    }
    

    所以这几乎与您已经拥有的相反,这就是为什么这通常被称为反向索引。

    有关此内容和另一个示例的更多信息,请在此处查看我的答案:Firebase query if child of child contains a value

    【讨论】:

    • 感谢您的回复。实际上我试图遵循这个结构firebase.google.com/docs/database/web/…
    • 当您只想为房间加载成员时,这种结构非常有用。如果您还想为会员加载房间,您将需要我在此处和链接中显示的内容。这只是您已有的列表之外的另一个平面列表。
    • 非常感谢。我将按照上述链接中的指南进行操作。干杯
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多