2017-07-11 4 views
0

ich eine Datenstruktur, wie so haben:Firebase Zuhörer, für bestimmte Kind Werte, auf Kind noch nicht erstellt

friend_requests_sent: 

    userId1: 
     sub_userId1: 
      status: "request_sent" 
     sub_userId2: 
      status: "request_sent" 
     sub_userId3: 
      status: "request_failed" 

    userId2: 
     sub_userId1: 
      status: "request_sent" 
     sub_userId2: 
      status: "request_failed" 
     sub_userId3: 
      status: "request_sent" 

Jeder sub_userId wird zu einem bestimmten Zeitpunkt in der Zeit erstellt, aber ich möchte eine Datenbank Hörer einzurichten Dies wird nur ausgelöst, wenn der Wert status für sub_userId auf gesetzt ist.

Das heißt, ich versuche, einen Beobachter auf der nicht vorhandene (noch) Pfad /friend_requests_sent/userId1/sub_userId4/status zu erstellen, die überprüft, ob es in der Tat request_sent ist, beide, wenn es erstellt wird und wenn die status Wertänderungen danach.

Wie kann ich einen Schnappschuss von ersterem bekommen? Es fühlt sich so an, als wäre ich im Firebase-Abfragesystem verloren gegangen.

Vielen Dank im Voraus!

+0

Dies klingt wie ein Job für Firebase Cloud-Funktionen. Was genau möchten Sie tun, wenn sich dieser Pfad ändert ... Möchten Sie einen Teil der Datenbank aktualisieren ... –

+0

Nein Ich möchte die Benutzeroberfläche aktualisieren – Herakleis

Antwort

0
friend_requests_sent: 
    userId1: 
     requests: 
      sub_userId1: "insertstatushere" 
      sub_userId2: "insertstatushere" 
      //continue 

Ich denke, das wäre viel besser. Fügen Sie ein Kind hinzu, das nur für diesen Pfad hinzugefügt, entfernt und geändert wurde (userIDHere/requests /). Auf diese Weise können Sie alles überprüfen und handhaben.

+0

Danke, aber ich habe andere Dinge drin als das "Status" -Feld (Timestamp), also kann ich das nicht wirklich tun: s – Herakleis

+0

Dieser Kommentar ist eigentlich der Schlüssel zu Ihrem Problem: Sie scheinen eine Liste basierend auf dem Status der Einträge anzeigen zu wollen. In diesem Fall sollten Sie genau das in der Datenbank behalten: eine Liste mit dem Status der Einträge. Selbst wenn Sie die Statusdaten auch an anderer Stelle aufbewahren, ist die direkteste Zuordnung von der Datenbank zur Benutzeroberfläche wahrscheinlich am einfachsten, um sie in Ihrer Benutzeroberfläche anzuzeigen. –

0

Hier ist der Code, schlage ich vor:

firebase.database().ref("friend_requests_sent").once('value', function(snap){ 

    snap.forEach(function(child){ 
     //For each userID below query looks for subusers whose status are 'request_sent' 

     child.ref.orderByChild('status').equalTo('request_sent').on('child_added', function(grandChild){ 
      //grandChild.val() is the sub-user of child.val() 
      //grandChild.val().status is equal to 'request_sent' 
      alert(grandChild.val().status); 
     }); 
    }); 

)}; 

Hoffnung, das funktioniert!