AngularFire - 将两个FireStore集合与相同的pushId项组合在一起

Sta*_*cki 2 typescript angularfire2 angular google-cloud-firestore

我正在使用AngularFire + FireStore开展一些项目.

我的Firestore模型如下所示:

  • 收集1

    • key1 {some data}
    • key2 {some data}
  • 收集2

    • key1 {其他数据}
    • key2 {其他数据}

现在我需要显示列表,其中我有来自第一个集合的一些数据,以及来自另一个集合的一些数据.如何创建这样的列表?

制作两个可观察对象然后合并它似乎毫无意义.

const collection = this.afStore.collection<any>(collectionName);
    return collection.snapshotChanges()
      .map(participants => {
        return participants.map(participant => {
          const data = participant.payload.doc.data();
          const id = participant.payload.doc.id;
          return {id, ...data};
        });
      });
      
Run Code Online (Sandbox Code Playgroud)

我有这个代码,它采用数据+ id,现在我需要使用此id从另一个集合中提取数据,但不知道如何.

Joe*_*Joe 5

这就是我做我的方式......

"projects"数据包含customer_doc_id,customer_builder_doc_id,customer_contractor_doc_id,它们是Firestore中其他数据集合的doc_id.命令mergeMap在rxjs ^ 5.5.0中工作.

 private getProjectsCombineObservables(): Observable<any[]> {
this.projectsCollection = this.afs.collection<Project>('projects', ref =>
  ref.orderBy('job_number', 'desc'));
return this.projectsCollection.snapshotChanges()
  .map(actions => {
    return actions.map(a => {
      const project_data = a.payload.doc.data() as Project;
      const doc_id = a.payload.doc.id;

      let observable1 = this.getCustomer(project_data.customer_doc_id);
      let observable2 = this.getBuilder(project_data.customer_builder_doc_id);
      let observable3 = this.getContractor(project_data.customer_contractor_doc_id);

      const combinedData = Observable.combineLatest(observable1, observable2, observable3, (data1, data2, data3) => {
        return { ...data1, ...data2, ...data3 };
      });

      return combinedData.map(data => Object.assign({}, { doc_id, ...project_data, ...data }));
    });
  }).mergeMap(observables => Observable.combineLatest(observables));
Run Code Online (Sandbox Code Playgroud)

}

  • 抱歉,但是您不能不说明方法的来源就扔方法。什么是this.getCustomer()?什么是this.getBuilder()?哪儿来的呢?他们在做什么? (2认同)