我有以下firebase数据结构:

firebase-database-1234:
  user_keywords (list)
    keyword_a
    keyword_b

  keywords (object)
    keyword_a
      name
    keyword_b
      name

  keyword_posts (list)
    keyword_a
      postkey1
      postkey2
      postkey3
    keyword_b
      postkey4
      postkey5

  posts (object)
    postkey1
      date_time
      title
      etc
    postkey2
      date_time
      title
      etc
    postkey3
      date_time
      title
      etc
    postkey4
    postkey5

基本上,我要尝试的是具有一个结构,其中用户具有用于检索帖子的标签或关键字。 每个user_keywords节点都有用户选择的关键字。 我需要在关键字节点中获取所有匹配的关键字,以便获得名称属性,等等。

然后,我需要从keyword_posts节点获取与用户选择的关键字匹配的帖子关键字列表。

然后,我遍历每个post键属性,并从posts节点获取实际的post数据。

我知道如何使用嵌套的订阅和数组来做到这一点。 但是我真正想要的是一系列可观察变量,因此我基本上可以使用异步管道让一个可观察变量订阅帖子。

就我目前使用的数据结构而言,这是到目前为止的内容:

getKeywordsByUser(userId: string): Rx.Observable<any[]> {
  return this.af.list(`users/${userId}/filters_incoming/keywords`)
    .map(user_keywords => {
      return user_keywords.map(ukw => {
        return this.af.object(`keywords/${ukw.$key}`);
      })
    })
    .flatMap(res => Rx.Observable.combineLatest(res));
}

getPostsByKeywords(userId: string): Rx.Observable<any[]> {
  this.keywords = [];
  return this.getKeywordsByUser(userId)
    .map(keywords => {
      return keywords.map(keyword => {
        this.keywords.push(keyword.name);
        return this.af.list(`keyword_posts/keywords/${keyword.$key}/posts`, {
          query: {
            limitToLast: 33,
            orderByKey: true
          }
        })
        .map(post_keys => {
          return post_keys.map(post_key => {
            return this.af.object(`posts/${post_key.$key}`)
        });
      });
    });
  })
    .flatMap(res => Rx.Observable.combineLatest(res));
}

this.getPostsByKeywords(this.user.uid)
  .subscribe(sub => {
    console.log('sub = ', sub);
  });

它返回一个数组数组:

sub =(2)[Array(1),Array(8)] 0:[FirebaseObjectObservable] 1:(8)[FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable__ )

  ask by Mike Lallemont translate from so

本文未有回复,本站智能推荐:

2回复

在Angularfire2中“加入”Firebase查询

更新: 我遇到的空值字段的问题与我的数据库中不存在的键有关,所以这里的大部分话语都不适用于你的问题。 如果您正在寻找一种在AngularFire2中“加入”查询的方法,下面接受的答案可以很好地解决这个问题。 我目前正在使用combineLatest而不是forkJoin 。 为了做到这
1回复

加入AngularFire2

我已经看到了类似的问题,但这些问题的数据结构与我正在处理的问题略有不同。 我看过: 使用AngularFire基于id在路径之间连接数据 AngularFire2:使用RxJS .map()对FirebaseListObservables执行'连接' 这是我的数据结构: {
2回复

Angular2和Firebase(AngularFire2)

我使用Angularfire2与Firebase通讯。 这是代码。: 指令af.database.list('items')花费几秒钟来检索数据。 那么,我怎么知道什么时候已经加载了数据呢? 如果我知道,我可以显示一个“加载栏”。
1回复

在AngularFire2/Firebase和NodeJS之间共享AccessToken

我觉得我想做的事情要么简单,要么非常错误。 不确定哪一个。 我想构建一个由Firebase支持的应用程序,用于: 认证 实时数据库 我将使用AngularFire2构建Angular2前端单页应用程序。 使用AngularFire2,用户将使用GoogleAuthenti
1回复

使用Firebase和AngularFire2注册用户

在我的app.component.ts中,我使用此函数使用angularFire2将用户注册到firebase。 但是我收到错误,“属性'订阅'在类型'void'上不存在”。 在我的userService.ts中,我有以下调用从firebase获取数据 我明白为什么会出现错误。 因为
3回复

如何使用Angularfire2从Firebase存储中删除

我基本上是 Angularfire2 的新手,当用户按下删除按钮时,我试图从 Firebase 存储中删除一个文件夹。 不幸的是,此类信息不在 Angularfire2 文档中。 我基本上尝试使用下面的代码: 不幸的是,它抛出以下错误 我将每个客户的文档存储在一个文件夹中,该文件夹的名称与客户的ui
4回复

angularfire2找不到模块“firebase/app”

应用程序组件: package.json 文件: 位于服务中的无效导入: 我只包含了可能与错误有关的依赖项,但如果我错过了什么,请告诉我。 我已经尝试了多个版本。 这确实有效,但它有一个错误。 问题出在 import { auth } 中,它允许我登录到 firebase。 我不知道是什么问题。
1回复

使用AngularFire2/Firebase的嵌套查询

我正在使用Angular2和Firebase吗?经过大量搜索后我发现无法对firebase数据进行嵌套查询,所以我需要对数据库进行重组。有人能告诉我构建数据的另一种方法是什么用一些例子? 下面是firebase上的数据结构