2017-08-15 59 views
0

我喜歡檢查所有包含孩子的變量爲id的孩子。Firebase調用`child(all).equalTo(id)`

這是我想出了:

usersref.child(formData.openid + '/votes').child().equalTo(formData.appid).once('value', function(snapshot) {}); 

這回:Firebase.child失敗:調用了0參數。預計至少爲1

也試過:

usersref.child(formData.openid + '/votes').orderByKey().equalTo(formData.appid).once('value', function(snapshot) {}); 

這不會引發錯誤,但不會返回任何值。

usersref.child(formData.openid + '/votes').orderByChild('a').equalTo(formData.appid).once('value', function(snapshot) {}); 
usersref.child(formData.openid + '/votes').orderByChild('b').equalTo(formData.appid).once('value', function(snapshot) {}); 
usersref.child(formData.openid + '/votes').orderByChild('c').equalTo(formData.appid).once('value', function(snapshot) {}); 
... 
usersref.child(formData.openid + '/votes').orderByChild('z').equalTo(formData.appid).once('value', function(snapshot) {}); 

這是有效的,但它需要經過很多請求。

數據結構:

{ 
    "AzxaXACf7UeOOsmlLh5vp4" : { 
    "favorites" : { 
     "3811" : true, 
     "3910" : true 
    }, 
    "votes" : { 
     "-KraGbsn8bHop70uUISB" : { 
     "upvote" : "3811" 
     }, 
     "-KraGcxU3gR-pqPUcEs8" : { 
     "downvote" : "3811" 
     }, 
     "-KraGkJp4oGivIF9qjml" : { 
     "upvote" : "3910" 
     }, 
     "-KraGrOy156zy5pXoR-G" : { 
     "upvote" : "3903" 
     }, 
     "-KraHhNKp2ISqNeYzS2g" : { 
     "downvote" : "3903" 
     }, 
     "-KraHr2ZANh6FlZ3xn4T" : { 
     "upvote" : "3280" 
     }, 
     "-KraKLTqwli9Q7j8mQ8w" : { 
     "upvote" : "3653" 
     }, 
     "-KraM0qUqeu9tyeHyesE" : { 
     "downvote" : "3910" 
     }, 
     "-KraM5MfgO-WW1E-aZK_" : { 
     "downvote" : "2858" 
     }, 
     "-KraMVvGSeDwkUr_2ece" : { 
     "downvote" : "2411" 
     }, 
     "-KraMWF-4oAycb0Gg3sH" : { 
     "upvote" : "2411" 
     }, 
     "-KraMifSigQ06jFvG0Q_" : { 
     "upvote" : "2344" 
     } 
    } 
    }, 
    "CLsAiPzci5Re0A5RvchUaA" : { 
    "favorites" : { 
     "3811" : true, 
     "3884" : true, 
     "3970" : true 
    }, 
    "votes" : { 
     "-Kra4o-J3vEWBxWUDvBO" : { 
     "downvote" : "3849" 
     }, 
     "-Kra4tV883O2N6_TZ_-P" : { 
     "upvote" : "3884" 
     }, 
     "-Kra4wY5jfbnm1xod-lU" : { 
     "downvote" : "3884" 
     }, 
     "-Kra54vEXVgk6Yksw_i6" : { 
     "upvote" : "3778" 
     }, 
     "-Kra5CS3iYrskVH8zBMi" : { 
     "upvote" : "3764" 
     } 
    } 
    }, 
    "ChzvupeGjiG0BYmCHinJrE" : { 
    "favorites" : { 
     "3811" : true, 
     "3910" : true 
    }, 
    "votes" : { 
     "-KraFNIoZpFqHvvOtFXh" : { 
     "downvote" : "3811" 
     }, 
     "-KraFQ_Ym9g9Jplxx1On" : { 
     "upvote" : "3811" 
     }, 
     "-KraFcEFNIVTfu8VkHGJ" : { 
     "upvote" : "3910" 
     }, 
     "-KraFfawEo7Km6jn_dk5" : { 
     "downvote" : "3678" 
     }, 
     "-KraFlSGxJl_5owfGsZd" : { 
     "downvote" : "3778" 
     }, 
     "-KraFpsRnEl4CjQN217w" : { 
     "downvote" : "3769" 
     } 
    } 
    }, 
    "I1SKo3UK8BmeET9fPPvpuo" : { 
    "votes" : { 
     "-KraFMANOoLdOFoICWH2" : { 
     "upvote" : "3910" 
     } 
    } 
    }, 
    "K_a5kz2pdgYfOiBmT8JGxc" : { 
    "votes" : { 
     "-Kracl3JaWWYeD_YLVan" : { 
     "downvote" : "3764" 
     } 
    } 
    }, 
    "LogzS_ZExtPm8AV6YolLkM" : { 
    "favorites" : { 
     "3811" : true, 
     "3970" : true 
    }, 
    "votes" : { 
     "-Kra1HNVSRYnGOMq0xZK" : { 
     "downvote" : "3970" 
     }, 
     "-Kra1OWl52FfUehK7-yq" : { 
     "upvote" : "3970" 
     }, 
     "-Kra1ZLVzxo4TtXquaZu" : { 
     "upvote" : "3851" 
     }, 
     "-Kra1bKIWj0anYj-F4sr" : { 
     "downvote" : "3851" 
     }, 
     "-Kra1flJIk6CzT6BW2di" : { 
     "upvote" : "3778" 
     }, 
     "-Kra1sU1FpSPxCSH-NkC" : { 
     "upvote" : "3903" 
     }, 
     "-Kra1wxxyDNQqZCYI0ZO" : { 
     "upvote" : "3811" 
     } 
    } 
    }, 
    "OufAmSLsiabJc0ou2oqA2c" : { 
    "favorites" : { 
     "2896" : true 
    }, 
    "votes" : { 
     "-Kra4zr7J5RFv8X96BPp" : { 
     "upvote" : "3903" 
     }, 
     "-Kra5-mUpIDqiV-xbm5e" : { 
     "downvote" : "3903" 
     }, 
     "-Kra50ZODLPN-Hz_M3_P" : { 
     "upvote" : "3903" 
     }, 
     "-Kra5OuuuqmIiHBf0kut" : { 
     "upvote" : "3903" 
     }, 
     "-Kra5PqL4H0oN-MSSNjr" : { 
     "upvote" : "3903" 
     }, 
     "-KradBD0hRetdaq7ia0Q" : { 
     "downvote" : "2896" 
     }, 
     "-KradCiHyImnvRy-Uzu3" : { 
     "upvote" : "2896" 
     }, 
     "-Kradu_d25JMX69TOAVB" : { 
     "upvote" : "3811" 
     }, 
     "-KrakdW3B7rSg3Fhr2o-" : { 
     "upvote" : "3778" 
     }, 
     "-KrakgwUjMDIHPpL2wh2" : { 
     "upvote" : "3885" 
     } 
    } 
    } 
} 
+1

您能否爲我們提供您的數據庫結構? –

+0

@ZiyaERKOC檢查我的更新 –

+0

隨着更新的JSON你的查詢不再有意義了。什麼是formData.openid和什麼是orderByChild('a')。equalTo(formData.appid)'在這個新的結構上? –

回答

1

沒有火力地堡數據庫API通過所有的孩子尋找一個特定的值。

我能想到的最好的方法是創建一個所有值的倒排索引,返回到任何孩子都有該值的選票。所以:

app_index 
    appid1 
    voteid1: true 
    voteid2: true 
    voteid3: true 
    appid2 
    voteid1: true 
    voteid3: true 
    appid3 
    voteid2: true 
    voteid4: true 

有了這個,你可以查找一個特定的應用程序ID的所有投票。

+0

檢查我的更新。該數據結構基於用戶(而不是應用程序),因此他們可以查看哪些應用程序已投票或已投票。 –

相關問題