2

我目前有一个场景,我有一系列问题,我成功地获取了这些问题。在 firestore 中,每个 issue ( issues > issueID) 都有一个名为images.

在该集合中,每个图像都有文档 ID。( issues > issueID > images > imageID)。我有一个显示所有问题的页面,我还想显示每个问题的所有相关图像。

在下面的 HTML 中,我添加了一条评论,说明我希望问题图像去哪里。

期望的结果:

  • 第一期
    • 问题 1 图片
  • 第 2 期
    • 问题 2 图片

ETC

获取问题

 this.issuesCollection = this.afs.collection<any>(`users/${this.userID}/projects/${this.project_id}/issues`, ref => ref.orderBy('issue_order'));
      // this.issues = this.issuesCollection.valueChanges();   
      this.issues = this.issuesCollection.snapshotChanges().pipe(
        map(actions => actions.map(a => {
          const data = a.payload.doc.data();
          const id = a.payload.doc.id;
          return { id, ...data };
        }))
      );

HTML

<ul>
   <li *ngFor="let issue of issues | async">
      {{issue.issue_title}}
      <ul>
         <li>
             <!-- THIS IS WHERE I WOULD LIKE THE IMAGES PER ISSUE TO GO -->      
         </li>
      </ul>
    </li>
</ul>

图像集合参考 这是图像的位置,其中id是问题的 ID。这还没有被连接起来,但它是图像的位置。

this.imagesCollection = this.afs.collection<any>(`users/${this.userID}/projects/${this.project_id}/issues/${id}/images`);
this.images = this.imagesCollection.snapshotChanges()
4

1 回答 1

2

firebase 中有一个名为Collection group query的新功能,这绝对可以帮助您解决问题。但不幸的是,我认为这已经在 angularfire2 中实现了。

您可以使用RxJS MergeMap

  const collection = this.firestore.collection('users');
  return  collection.valueChanges.pipe(
    mergeMap( (users: User[]) =>  
               this.firestore.doc(`stories/${users[0].uid}`).
                        valueChanges().pipe(map(
                          (storie) => Object.assign({}, {users[0].uid, ...users[0], ...stories}
                      ))
           ))
   );
于 2019-05-19T18:38:51.787 回答