2016-04-07 8 views
4

Weiß jemand, wie ich eine gemeinsame "OR" wie in einer Where-Klausel, in Firebase tun kann?OR-Klausel in Firebase Java-Android

Ich muss das in der Abfrage tun, weil ich die Abfrage an einen Adapter sende. Also, ich meine, ich kann keinen Listener hinzufügen und einen Wert überprüfen und dann noch einen. Ich muss die vollständige Abfrage auf dieses Ergebnis in meiner Abfrage zeigen.

Was ich habe, ist so etwas wie:

chat1: 
    user1Id: "1" 
    user2Id: "2" 
    bothUsers: "1_2" 

chat2: 
    user1Id: "2" 
    user2Id: "4" 
    bothUsers: "2_4" 

Ich brauche alle Chats des Benutzers zu erhalten, deren ID „2“ ist. Ich versuche, eine Abfrage zu tun:

userLogged = 2; 
Query queryRef = firebase.orderByChild("user2Id").equalTo(userLogged); 

aber es wird nur die Chats erhalten, wenn der Benutzer 2 in der user2Id Position befindet. Aber im obigen Beispiel, wenn der Benutzer 2 in der user1Id (Chat2) ist, wird es nicht erhalten. Und ich muss es bekommen. Wie kann ich das machen?

Antwort

3

In einer NoSQL-Datenbank müssen Sie Ihre Daten oft so modellieren, wie Ihre App sie benötigt (siehe diesen Artikel für eine gute Erklärung zu NoSQL Data Modeling). Also, wenn Sie eine Liste aller Chats für einen bestimmten Benutzer benötigen, speichern Sie diese Liste:

/userChats 
    user1Id 
    chat1: true 
    user2Id 
    chat1: true 
    chat2: true 
    user4Id 
    chat2: true 

Dieser Prozess Denormalisierung genannt wird, und es wird in dem Artikel, den ich oben in den Firebase documentation on structuring data und in diesen blog post verbunden abgedeckt.

+0

Vielen Dank! Ich lese gerade den Artikel und es ist hilfreich. Ich habe jedoch noch einen Zweifel: Wie bekomme ich in diesem Fall die Attribute, die ich für den Chat habe, wie die Chat-ID und die Benutzer, die im Chat anwesend sind? Wie kann ich eine Abfrage durchführen, um diese Informationen zu erhalten? –

+0

Ich kümmere mich um alle Informationen aus dem Chat und lege sie in diese neue Liste von Chats. Anstatt zum Beispiel nur: (chat1: true) setze ich nur chat1 und seine Attribute darunter. Es funktioniert einwandfrei, aber ich bin mir nicht sicher, ob es in Ordnung ist, alle Informationen so zu tragen. Ist es okay? –

+0

Sie würden die Schlüssel durchlaufen und dann den tatsächlichen Chat-Daten "beitreten". Wenn Sie FirebaseUI verwenden, werfen Sie einen Blick auf diese Antwort: http://stackoverflow.com/questions/34559171/coupling-firebaserecyclerviewadapter-to-a-oolean-string-map-entry –