AngularFire2和Firestore dyanamic查询:基于用户首选项

时间:2018-04-10 12:24:51

标签: angular firebase google-cloud-firestore angularfire2

这是我想要实现的目标。

我有添加了最喜欢的俱乐部的用户(如利物浦,巴萨等)。最喜欢的俱乐部数量可以从1到5(最多5)不等。

当我需要显示最喜欢的俱乐部新闻时,我需要从firestore获取所有新闻,其中添加了俱乐部名称作为此类文档的属性......

news: sddf938slsjsf(ID): title: 'news title', club: 'Liverpool'

如果我知道有多少个固定数量的俱乐部,我可以 - 根据每个fav_clubs(.where('club','==','Liverpool')的五个可观察流和使用CombineLatest运算符

但在我的情况下,最喜欢的俱乐部的数量可能会有所不同,这是从用户收集中获取的 - > Tagged_clubs。

我正在努力寻找实现这一目标的方法。

1 个答案:

答案 0 :(得分:1)

这是您所需的最低模型(我不会限制为5个俱乐部更快):

User {
  ID: string;
  favorites: string[];
}

Club {
  ID: string;
}

New {
  club: string;
  title: string;
  content: string;
}

现在,假设您希望获得用户喜爱的俱乐部的所有新闻。

getFavNews(user: User) {
  const calls = [];
  for (let fav of user.favorites) {
    calls.push(this.getNewForClub(fav));
  }
  return forkJoin(calls);
}

getNewForClub(club_ID: string) {
  // Firebase request to get the news about the given club
}

使用此代码,您需要订阅该方法,该方法将为俱乐部返回一系列新闻:forkJoin允许您一次触发多个请求,并且您的订阅仅在所有请求时执行请求已经提出。

我就是这样做的。