0

Ich möchte Daten aus Firebase-Datenbank in eckigen 4 Anwendung filtern. Ich muss zwei Filter anwenden.Mehrere OrderByChild-Filter in Firebase-Datenbank-Abfrage

  1. Liefert alle Benutzer online
  2. Fetch alle nicht spielen Benutzer

ich einige Artikel lesen, die wir nicht zwei orderByChild critearea in Abfrage hinzufügen. So habe ich Map-Funktion, wie unten,

users: FirebaseListObservable<any[]>; 
public DB: 
AngularFireDatabase; 

constructor(private router: Router, private db: AngularFireDatabase) { 
    this.DB = db; 
} 
showPeopleList() { 

    this.users = <FirebaseListObservable<any>>this.DB.list('/users', 
    { 
    query: { 
     orderByChild: 'isOnline', 
     equalTo: true, 
     limitToLast: 20 
    } 
    }).map((items)=> { 
    let filteredUser: any[]; 
    for (let item of items) { 
     if(items.isPlaying == false){ 
     filteredUser.push(item); 
     } 
    } 
    return filteredUser; 
}); 



} 

In obigem Code in Map-Funktion, ich bin alle Online-Nutzer bekommen, aber ich bin nicht in der Lage Daten zu filtern, basierend auf dem Feld spielen. Welche Änderungen muss ich tun, um dies zu tun.

Antwort

3

Sie sollten nur die .filter Funktion dafür verwenden können.

.filter(item => item.isPlaying === false) 

In Ihrem obigen Code haben Sie einen Schreibfehler, der auch dazu führen könnte, dass Ihre aktuelle Funktion nicht funktioniert. Beachten Sie die s in nach items in Ihrer if Aussage.

if(items.isPlaying == false){ 
     filteredUser.push(item); 
} 
+0

Oh, vergessen zu Filterfunktion zu verwenden ... danke ... –

+0

Haben Sie eine Frage. In meinem Code funktioniert der isPlaying-Filter nur für 20 Datensätze oder er wird für alle Datensätze in Firebase funktionieren und dann insgesamt 20 Zeilen zurückgeben. Wenn es nur auf 20 Datensätzen funktioniert, dann besteht die Möglichkeit, dass alle 20 isPlaying === true sind, und ich bekomme nichts :( –