Firebase:从未知的孩子中检索嵌套的数据

我有这样的firebase结构

"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。 我怎样才能迅速做到这一点?

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

 "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,请在创build时将其存储在广播中,例如:

 "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数据库拥抱反规范化!