2017-05-16 131 views
0

检索嵌套数据我有一个火力点的结构是这样火力地堡:来自未知孩子

"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等于真正的所有节点。我怎样才能迅速做到这一点?你可以这样做

+0

对于所有的用户或单个用户? –

+0

@NiravD谢谢。我已经试过这个查询,但我什么都没有(snapshot.childrenCount = 0) –

+0

@ user7814783其实我想检索所有用户沿他们的广播,但只有那些'c'等于真的 –

回答

0

的一种方法是通过重组你的数据库:

"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... 
} 

然后你就可以通过调用得到所有你想要的广播:如果您想让用户ID以及

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

,将其存储在广播中,例如:

"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数据库!

+0

谢谢布拉德利。这样我就知道它应该可以工作。如果用户可以有多个具有相同广播ID但具有不同广播详细信息的记录,可否请您指导一下数据库结构? –

+0

@WaqarAli这将需要更复杂的结构。你确定你需要一个用户有两个相同ID的广播吗?一个ID通常应该唯一标识一个元素。 –

+0

是的,在我的情况下,用户可以有多个具有相同ID的广播,但具有不同的详细信息,例如持续时间观看者等。 –