2017-03-06 2 views
0

Ich versuche, eine Liste von Firebase, die eine Reihe von E-Mail-Adressen hat, zu holen. Ich möchte nur die Elemente, die der E-Mail in der Abfrage entsprechen. Hier ist die Struktur. Ich versuche, Gegenstände zu holen, die [email protected] unter collaboratorsAngularefire2 - Abfrage liefert keine erwartete Antwort

enter image description here

der Abfrage entsprechen:

this.firebase.list('/todo', { 
     query: { 
      orderByChild: 'collaborators', 
      equalTo: '[email protected]' 
     } 
    }).subscribe((data)=>{ 
     console.log(data); 
    }); 

Diese Rückkehr leeres Array, die angeblich zur Liste ein Element!

Wie kann ich dieses Problem lösen ..

Lösung:

let results = this.firebase.list('/todo') 
     .map(data => data.filter((e) => { 
      return e.collaborators.indexOf(email) > -1; 
     } 
    )); 
    return results 

Antwort

1

Sie versuchen, die E-Mail-Adresse zugreifen, als ob es ein Wert von collaborators war. In der Tat ist die E-Mail-Adresse ein Wert eines seiner Kinder.

Ich würde vorschlagen, Ihr Modell zu restrukturieren, um die E-Mail als Schlüssel und nicht als Wert zu verwenden. z.B. [email protected]: true. Ich erwähnte einige der Vorteile und bot ein paar Links an, die das Thema in meinem Kommentar unten behandeln.

Nach dieser geringfügigen Änderungen an Ihrem Modell, verwenden Sie den map Operator collaborators und verwenden Sie den filter Operator abzubilden Objekte herauszufiltern, deren collaborators Objekt enthält eine Eigenschaft, deren wichtigsten Spiele email.

getNotesFromSpecifiedUser(email: string): Observable<any> { 
    let results = this.af.database.list('/todo') 
    .map(data => data.filter(data => (email in data.collaborators))) 
    return results 
} 

Wichtig: Wenn es keine Einträge in collaborators wird ein Fehler geworfen werden, weil die in Schlüsselwort nicht null verarbeiten kann. Wenn es denkbar ist, dass collaborators leer ist, lass es mich wissen.

+0

Ich bekomme diesen Fehler 'this.firebase.list (...). Karte ist keine Funktion ' –

+1

Sie müssen den Operator importieren. 'import 'rxjs/add/operator/map'' –

+0

Dies gibt ein leeres Array zurück –

Verwandte Themen