0

我是FireBase的新手,我試圖設置一個簡單的數據庫。這是我的數據:AngularFire2 - 按數組篩選的列表

{ 
    "employees" : { 
    "employee1" : { 
     "name" : "Anthony" 
    }, 
    "employee2" : { 
     "name" : "John", 
     "reviews" : { 
     "review1" : true, 
     "review2" : true, 
     "review3" : true 
     } 
    } 
    }, 
    "leaders" : { 
    "leader1" : { 
     "company" : "Strawberry", 
     "name" : "Martin", 
     "reviews" : { 
     "review1" : true 
     } 
    }, 
    "leader2" : { 
     "company" : "Blueberry", 
     "name" : "Carlos", 
     "reviews" : { 
     "review2" : true, 
     "review3" : true 
     } 
    }, 
    "leader3" : { 
     "company" : "Greenberry", 
     "name" : "Peter" 
    } 
    }, 
    "reviews" : { 
    "review1" : { 
     "comment" : "Test1", 
     "date" : "Thu Jul 06 2017 14:00:51 GMT+0200 (CEST)" 
     }, 
     "review2" : { 
     "comment" : "Test2", 
     "date" : "Thu Jul 06 2017 14:00:51 GMT+0200 (CEST)" 
     }, 
     "review3" : { 
     "comment" : "Test3", 
     "date" : "Thu Jul 06 2017 14:00:51 GMT+0200 (CEST)" 
     } 
    } 
    } 
} 

我想以下功能:

  1. 獲得評論對投資者
  2. 獲得評論寫僱員

我的問題有以下幾種:

  • 是根據我的功能需求,我的數據結構是否正確?
  • 我應該用什麼查詢來完成這些功能?我曾經想過先獲得領導者對象,然後根據領導者評論數組獲得某種過濾器的評論。
  • 如果可以得到領導和相關的評論,所有在一個查詢中,這將是偉大的。

舉一個例子,假設我想獲得leader1的評論。

db.object('/leaders/leader1').subscribe(res => { 
     this.leader = res; 

//THIS IS THE PROBLEM: GET REVIEWS ON LEADER 
     db.list('/reviews', { 
      query: { 
      equalTo: this.investor.reviews 
      } 
     }).subscribe(queriedList => { 
      this.reviews = queriedList 
     }); 
    }); 

謝謝。

+0

我給你的建議的一塊,「是我的數據結構是否正確,根據我的功能需求?「這種類型的問題在這裏是關於stackoverflow的話題。另外你在這裏遇到什麼問題?現在你的問題太廣泛了。 「請編輯問題以將其限制爲具有足夠詳細信息的特定問題,以便找出適當的答案。避免一次詢問多個不同的問題。請參閱[如何提問](https://stackoverflow.com/help/how-問)頁面幫助澄清這個問題。「 –

+0

感謝您花時間回覆,Fabio。我不知道數據結構不允許在Stack Overflow上得到解答,所以我對此表示歉意。感謝您將我與How To Ask頁面聯繫起來,但是,如果您刪除了數據結構問題,則只剩下一個問題 - 我應該使用哪些查詢來完成這些功能?請讓我知道是否有任何具體的錯誤來回答我的問題。 –

+0

這不是關於數據結構,而是關於詢問「x是否正確」或「我是否是最好的方式?」 –

回答

0

你可以得到一個leader1的評論是這樣的:

import { Component, OnInit } from '@angular/core'; 
import { AngularFireAuth } from 'angularfire2/auth'; 
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database' 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html' 
}) 
export class AppComponent implements OnInit{ 
    reviews: Array<FirebaseObjectObservable<any[]>> = []; 

    constructor(private fAuth: AngularFireAuth, private db: AngularFireDatabase) { } 

    ngOnInit() { 
    this.fAuth.authState.subscribe(user => { //check if the user is logged in if you don't care about it you can remove this 
     this.db.object('/leaders/leader1').subscribe(leader => { 
     this.reviews = Object.keys(leader.reviews).map(r => db.object('/reviews/' + r)) 
     }) 
    }) 
    } 
} 

然後在您的模板,你可以列出的評論是這樣的:

<ul> 
    <li *ngFor="let review of reviews">{{ (review | async)?.comment }}</li> 
</ul> 
+0

謝謝你花時間,它的工作。儘管如此,我仍然擔心它的表現,因爲我拿一個和一個。你對此有何看法?祝你有美好的一天! –

+0

@MartinBrandhaug Firabase在引擎蓋下有一些優化,閱讀這個問題。我知道它是iOS,但它對JS有效https://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse –