【问题标题】:Firebase: Retrieve nested data from unknown childrenFirebase:从未知子项中检索嵌套数据
【发布时间】:2017-05-16 11:33:16
【问题描述】:

我有这样的火力基地结构

"broadcast": {
    "ghjghjFc1S3KO0y8yJwORdfgret": {   //user ID
         "ryrtybgzMiI858YyGua": {  //broadcast ID
              "a": "xxx",   // broadcast Detail
              "b": "yyy",
              "c": false
         }
         "cbvbcvbMvAnSDqTb15vU": {  //broadcast ID
              "a": "xxx",   // broadcast Detail
              "b": "yyy",
              "c": true
         }
    }
    "3uqWZJRFc1S3KO0y8yJwORTMtWC2": {   //user ID
         "jkhjkbgzMiI858YyGua": {  //broadcast ID
              "a": "xxx",   // broadcast Detail
              "b": "yyy",
              "c": false
         }
         "qwwerqweMvAnSDqTb15vU": {  //broadcast ID
              "a": "xxx",   // broadcast Detail
              "b": "yyy",
              "c": true
         }
    }
}

我想检索所有具有广播且 c 等于 true 的节点。我怎样才能快速做到这一点?

【问题讨论】:

  • 所有用户还是单个用户?
  • @NiravD 谢谢。我已经尝试过这个查询,但我什么也没得到(snapshot.childrenCount = 0)
  • @user7814783 实际上我想检索他们广播中的所有用户,但只有那些'c'等于true的用户和广播
  • 你知道所有用户 uid 的编程吗?
  • @user7814783 不,我不知道。我不想再进行一次查询来获取所有用户的 ID。有没有办法从两个未知的嵌套孩子中检索数据?

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

您可以这样做的一种方法是重组您的数据库:

"userBroadcasts": {
    "ghjghjFc1S3KO0y8yJwORdfgret": { // user ID
        "ryrtybgzMiI858YyGua": true, // broadcastID
        "jkhjkbgzMiI858YyGua": true, // another broadcastID
        // etc..
    },
    // more users down here...
}

"broadcast": {
    "ryrtybgzMiI858YyGua": { // broadcast ID
        "a": "xxx",   // broadcast Detail
        "b": "yyy",
        "c": false
    },
    "jkhjkbgzMiI858YyGua": {
        "a": "xxx",
        "b": "yyy",
        "c": true
    },
    // more broadcasts down here...
}

然后你可以通过调用获得所有你想要的广播:

FIRDatabase.database().reference().child("broadcast").queryOrdered(byChild: "c").queryEqual(toValue: true)

如果您还需要用户 ID,请在创建时将其存储在广播中,例如:

"broadcast": {
    "ryrtybgzMiI858YyGua": { // broadcast ID
        "a": "xxx",   // broadcast Detail
        "b": "yyy",
        "c": false,
        "userID":"ghjghjFc1S3KO0y8yJwORdfgret"
    },
    "jkhjkbgzMiI858YyGua": {
        "a": "xxx",
        "b": "yyy",
        "c": true,
        "userID":"ghjghjFc1S3KO0y8yJwORdfgret"
    },
    // more broadcasts down here...
}

使用 Firebase 数据库接受非规范化!

【讨论】:

  • 谢谢布拉德利。通过这种方式,我知道它应该可以工作。如果用户可以有多个具有相同广播 ID 但具有不同广播详细信息的记录,您能否指导我的数据库结构是什么?
  • @WaqarAli 这需要更复杂的结构。你确定你需要一个用户拥有2个相同ID的广播吗? ID 通常应该用来唯一标识一个元素。
  • 是的,在我的情况下,用户可以有多个具有相同 ID 但细节不同的广播,即持续时间查看器等
  • @WaqarAli 我建议更改 2 个广播的 ID 不同,这是非常糟糕的做法。
  • 在这种情况下你会推荐什么?如果我有这样的结构怎么办:“brodacastID”{ autoID { // 广播细节 }, autoID { // 广播细节 } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多