2017-08-15 8 views
0

Ich möchte alle Kinder überprüfen, die ein Kind mit einem Wert für die Variable id enthält.Firebase ruft `child (all) .equalTo (id)`

Dies ist, was ich kam mit:

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

Dies ergab: failed Firebase.child: Wurde mit 0 Argumenten aufgerufen. Erwartet, dass mindestens 1

auch versucht:

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

Dieser keinen Fehler werfen, aber liefert keinen Wert.

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) {}); 

Dies funktioniert, aber es muss eine Menge Anfragen durchlaufen.

Datenstruktur:

{ 
    "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

Würden Sie uns Ihre Datenbankstruktur zur Verfügung stellen? –

+0

@ZiyaERKOC Überprüfen Sie mein Update –

+0

Mit dem aktualisierten JSON machen Ihre Abfragen keinen Sinn mehr. Was ist 'formData.openid' und was ist' orderByChild ('a'). EqualTo (formData.appid) 'auf dieser neuen Struktur? –

Antwort

1

Es gibt keine Firebase Datenbank-API durch alle Kinder für einen bestimmten Wert zu suchen.

Das beste, was ich mir vorstellen kann, ist die Erstellung eines invertierten Index aller Werte zurück zu den Stimmen, die diesen Wert in einem Kind haben. Also:

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

Mit diesem können Sie alle Stimmen für eine bestimmte App-ID nachschlagen.

+0

Überprüfen Sie mein Update. Diese Datenstruktur basiert auf dem Benutzer (und nicht auf den Apps), damit sie sehen können, welche App sie up- oder downvotet haben. –

Verwandte Themen