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 –