2017-08-17 14 views
0

角度4のアプリケーションでfirebaseデータベースからデータをフィルタリングする必要があります。私は2つのフィルタを適用する必要があります。firebaseデータベースクエリ内の複数のorderByChildフィルタ

  1. すべてのオンラインユーザー
  2. は、私たちは、クエリで2 orderByChildのcriteareaを追加することはできません、いくつかの記事を読んで、すべてのユーザー

をプレイしていないフェッチフェッチします。だから私は、以下のように上記のコードで

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; 
}); 



} 

をマップ機能を使用し、マップ機能では、私はすべてのオンラインのユーザーを取得していますが、私は、フィールドを再生するに基づいてデータをフィルタリングすることはできませんよ。 これを行うには、どのような変更が必要ですか?

答えて

3

これには.filter関数を使用するだけで済みます。

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

上記のコードでは、現在の機能が動作しなくなるスペルミスがあります。 ifステートメントでitemsの後にsがあることに注目してください。

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

ああ、フィルター機能を使用しています...ありがとう... –

+0

質問が1つあります。私のコードでは、isPlayingフィルタは20レコードだけで動作するか、firebaseのすべてのレコードで動作し、合計20行を返します。 20レコードのみで動作する場合、20個すべてがisPlaying === trueであり、何も得られない可能性があります:( –

関連する問題