CONTEXT:Filterung nach Enkeln Eigenschaft in Feuerbasis [in android]
Hallo, ich arbeite derzeit an einem Android-Projekt von Firebase unterstützt.
Ich habe eine denormalisierte Datenstruktur eingerichtet, die polls
mit users
(Viele-zu-viele-Beziehung) über votes
verbindet. Hier ist ein Bild, das den votes
Pfad meiner Datenbank anzeigt. Die Struktur ist wie folgt:
Stimmen -> [pollUid] -> [votePushuid] -> Abstimmung Objekt
So wir in diesem Beispiel eine einzige Umfrage, die 4 Stimmen hat.
Ich möchte überprüfen, ob ein Benutzer bereits über eine Umfrage abgestimmt hat. Um dies zu tun, hole ich die UmfragenUid, dann durchlaufen Sie seine Abstimmungen, um zu sehen, ob einige von ihnen die voterUid -Eigenschaft == zu ihrer Benutzer-UID enthalten.
Dies geschieht wie folgt:
FirebaseHandler.getInstance().getMainDatabaseRef()
.child(FirebaseConstants.VOTES) //votes root
.child(pollKey) //polluid
.orderByChild("voterUid")
.equalTo(FirebaseHandler.getInstance().getUserUid())
.limitToFirst(1)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {
Wenn die datasnaptshot existiert dann wissen wir, dass der Benutzer bereits bei dieser Umfrage abgestimmt hat und es in der Java-Logik umgehen können.
PROBLEM:
Die datasnapshot von onDataChange
empfangen ist immer null (dh nicht vorhanden ist), wenn für eine bestimmte Benutzer-Abstimmung über eine bestimmte Umfrage zu suchen. Ich weiß für eine Tatsache, dass die Abstimmung in der DB durch die Überprüfung der Daten vorhanden ist, und dass die userUid über das Debuggen korrekt ist. Das Entfernen der equalTo
und limitToFirst
gibt alle Stimmen für die Abstimmung ohne ein Problem zurück, so klar ist der Stamm des Verweises korrekt. Dies bedeutet für mich, dass das Problem durch eine der beiden oben genannten Methoden verursacht wird. Noch seltsamer ist die Tatsache, dass dieser Ansatz zu bestimmten Zeiten funktioniert, aber nicht zu anderen.
FRAGE: Wie gebe ich eine Liste der Firebase gespeicherten Objekte zurück, die durch eine Enkeleigenschaft gefiltert werden? Wenn dies nicht möglich ist, was wäre die geeignetere Datenstruktur für dieses Problem?
Auf eine weitere Anmerkung Ich habe Menschen gesehen, die den Ansatz der Verwendung von Query anstelle von Datenbankreferenzen. Vielleicht hat das etwas mit dem aktuellen Problem zu tun.