首页 > 解决方案 > AngularFirestore - 动态更新查询

问题描述

我有以下查询:

loadData(settings: any): Observable<any[]> {
    const ref = this.db.collection('data').ref
      .orderBy('simpleID', 'desc')
      .where('isVerified', '==', true)
      .limit(5);
    // Gender filter
     if (settings.includeMales && !settings.includeFemales) {
       ref.where('gender', '==', 'm');
     } else if (!settings.includeMales && settings.includeFemales) {
       ref.where('gender', '==', 'f');
     }

return this.db.collection('confessions', ref => ref)
      .valueChanges();

我想根据settings对象动态应用过滤器。

如何使用 ref 变量并将其传递给collect()Angularfire2 的方法?

标签: javascriptangularfirebasegoogle-cloud-firestoreangularfire2

解决方案


每次调用一个where()或其他方法时,它实际上都会返回一个新查询。所以你只需要确保捕获每个调用的查询。

var query = this.db.collection('data').ref
  .orderBy('simpleID', 'desc')
  .where('isVerified', '==', true)
  .limit(5);
if (settings.includeMales && !settings.includeFemales) {
  query = query.where('gender', '==', 'm');
} else if (!settings.includeMales && settings.includeFemales) {
  query = query.where('gender', '==', 'f');
}

return this.db.collection('confessions', ref => query).valueChanges();

推荐阅读