如何动态地向Firestore查询添加参数并映射到对象

将数据映射到对象并将其作为promise / observable返回,同时又可以向查询中添加动态/条件参数的推荐方法。

getcompanies2中,我可以向查询中动态添加参数,但是我无法弄清楚如何映射返回到我的对象的数据并将其作为Promise / Observable返回。

getcompanies中,一切都可以按我的要求工作,但是如果要添加动态查询参数,则必须重复代码(如下所示)。

注意:convertDocTimeStampsToDate只是按照它说的去做。我已经排除了它,以减少代码部分的大小。

getcompanies(searchText: string,useWhereactive: boolean): Observable<Company[]> {
    if (useWhereactive) {
      return this.db.collection('companies',ref => ref
      .orderBy('name').startAt(searchText).endAt(searchText + '\uf8ff')
      .where('active','==',true)
    )
      .snapshotChanges()
      .pipe(
        map(snaps => convertsnaps<Company>(snaps)),first()
      );
    } else {
      return this.db.collection('companies',ref => ref
      .orderBy('name').startAt(searchText).endAt(searchText + '\uf8ff')
    )
      .snapshotChanges()
      .pipe(
        map(snaps => convertsnaps<Company>(snaps)),first()
      );
    }
  }
​
getcompanies2(searchText: string,useWhereactive: boolean) {
    let query = this.db.collection('companies').ref
      .orderBy('name').startAt(searchText).endAt(searchText + '\uf8ff');
​
    if (useWhereactive) {
      query.where('active',true);
    }
​
    query.get().then(querysnapshot => {
      const results = this.convertDocuments<Company>(querysnapshot.docs);
      console.log(results);
    });
}


convertDocuments<T>(docs) {
    return <T[]>docs.map(doc => {
      return {
        id: doc.id,...doc.data()
      };
    });
}

export function convertsnaps<T>(snaps) {
  return <T[]>snaps.map(snap => {
    const data = convertDocTimeStampsToDate(snap.payload.doc.data());
    return {
      id: snap.payload.doc.id,...data
    };
  });
}
ccc_crazy_2000 回答:如何动态地向Firestore查询添加参数并映射到对象

我让它像下面那样工作,我想我仍然会兑现承诺。

尽管我仍在学习,并且不知道这是否是最好的方法,但是任何更好的解决方案都可以接受。

getCompanies2(searchText: string,useWhereActive: boolean) {
    let query = this.db.collection('companies').ref
      .orderBy('name').startAt(searchText).endAt(searchText + '\uf8ff');

    if (useWhereActive) {
      query.where('active','==',true);
    }

    return query.get().then(querySnapshot => {
      return this.convertDocuments<Company>(querySnapshot.docs);
    });
  }
本文链接:https://www.f2er.com/3155448.html

大家都在问