2016-06-15 8 views
1

Ich fange mit Abfragen in Firebase-Datenbank an und werde einige weitere Einblicke lieben.Einzelartikel Firebase

Diese Abfrage funktioniert beim Abrufen eines einzelnen Elements aus der Firebase-Datenbank. Mein Verständnis inline.

var ref = DatabaseRef; // root of my fbase db 
    var codeRef = ref.child('codes'); // at root/codes/ now 

    codeRef 
    .child($stateParams.codeId) // a param comes in 
    // grab value one-time 
    // https://www.firebase.com/docs/web/guide/retrieving-data.html#section-reading-once 
    .once('value', function(snap) { 
     console.log(snap.val()); 
    }) 

Das obige funktioniert. Aber unten nicht, und warum? Mein Verständnis inline.

// same ref from above 
codeRef 
    // traverse the /codes/ url, and find all items that match 
    // the specified param 
    .equalTo($stateParams.codeId) 
    .once('value', function(snap) { 
     console.log(snap.val()); // returns `null` 
    }) 

Stattdessen erwartete ich alle Objekte zu dieser ID-Abgleich bis zu zeigen. In diesem Fall ist die ID eindeutig, daher habe ich erwartet, ein einzelnes Objekt zurück zu bekommen. Es wird jedoch eine null zurückgegeben.

Vom docs:

Die EqualTo() Methode ermöglicht es uns, auf exakte Übereinstimmungen zu filtern. Wie bei den anderen Bereichsabfragen wird sie für jeden übereinstimmenden untergeordneten Knoten ausgelöst.

Also, vielleicht sehe ich diese ganze Firebase Queries falsch. Wird gerne erleuchtet sein.

Antwort

1

Ich vermute, dass Ihre Datenstruktur ist wie folgt:

"codes" : { 
     "codeId": { 
      ....: .... 
      } 
     } 

und Sie abfragen gegen "codeId".

ich recomment würde codeId (Schlüssel/Wert) unter "codeId" Objekt Hinzufügen gegen abzufragen, wie folgt:

"codes" : { 
     "-yabba_dabba_doo": { // codeId 
      codeId : "-yabba_dabba_doo" 
      } 
     } 

Jetzt können Sie dies tun:

ref.child('codes').orderByChild('codeId').equalTo('-yabba_dabba_doo') 

wenn ich haven‘ Wenn Sie Ihre Datenhierarchie richtig erraten haben, teilen Sie uns bitte Ihre Firebase-Datenhierarchie mit, damit wir Ihnen helfen können.

1

equalTo() ist eine Filtermethode. Sie müssen eine Bestellmethode verwenden. Schau dir die latest docs an. Vielleicht so etwas wie:

codeRef.orderByKey(). 
    .equalTo($stateParams.codeId) 
    .once('value', function(snap) { 
     console.log(snap.val()); // returns `null` 
    }) 
Verwandte Themen