在snapshotChanges()中使用订阅以通过Firestore检索值

时间:2018-10-28 05:09:03

标签: angular firebase firebase-realtime-database google-cloud-firestore angular2-observables

我不是构建应用程序的专家,但是我需要通过另一个集合中另一个文档的ID查找一个集合的文档。
我需要填充一个其中包含另一个对象(RealEstate)的对象(租户)。

所以我要做的第一件事就是使用 snapshotChanges map 来获取合同。 该合同具有一个ID作为属性,我想使用该ID向数据库进行新的查询以检索引用该ID的RealEstate,并使用该ID填充Contract.RealEstate的数据...

请参见上面的代码

  public contracts: Observable<Contract[]>;
  // I tried to use this property but it does not work... 
  public currentRealEstate: RealEstate = null;
  ... 

  this.contracts = this.afDb.collection<Contract>(
  'Contract',
  ref => ref.where('ownerId', '==', this.fb.user.uid).where("active", "==", true)
  ).snapshotChanges().pipe(
   map(actions => actions.map(a => {
    const data = a.payload.doc.data() as Contract;
    const id = a.payload.doc.id;
    data.id = id;

    // This is where I'm doing wrong... 
    this.afDb.doc<RealEstate>('RealEstate/' + data.realEstateId).valueChanges().
      subscribe((data) => {

        // attr the RealEstate data to the property... 
        this.currentRealEstate = data;  

        console.log(this.currentRealEstate); // return is ok on the log...
      });

    // attr the property to the Contract.realEstate...   
    data.realEstate = this.currentRealEstate; 

    return { id, ...data };
  }))

我该怎么办? 谢谢,如果我说错了,很抱歉。

0 个答案:

没有答案