Firestore - я хочу динамически добавлять операторы where в мою коллекцию - PullRequest
0 голосов
/ 13 февраля 2019

Технология: Я использую Angular 7, Firestore, GeoFireX.

Результат, который я хочу: Я хочу добавить запросы .where, если этот запрос требуетсяпользователями.Например, ниже у меня есть четыре.Иногда мне может понадобиться только два, и поэтому я хочу добавить только два, используя, возможно, оператор if, если пользователь выполняет поиск по секторам и марке (см. Метод: basicQueryBuilder)

Код ниже работает, но не является динамическим.

Кроме того, может ли коллекция this.geo.colo из GeoFireX иметь .limit (20) так же, как обычная коллекция?

Текущая попытка:

  public getFirestoreJobs(queryType: string, limit: number, pageSize: number): Observable<any> {
    limit = limit + pageSize;

    if (queryType === 'geo') {
      const collection = this.geoQueryBuilder();
      const center = this.geo.point(51.5074, 0.1278);
      const radius = 20;

      return collection.within(center, radius, 'point');
    } else {
      const collection = this.basicQueryBuilder();

      return collection.valueChanges();
    }
  }

  public geoQueryBuilder(): any  {
    return this.geo.collection('jobs', ref => ref
      .where('sector', '==', 'teacher')
      .where('brand', '==', 'all')
      .where('payType', '==', 'salary')
      .where('tags', 'array-contains', 'salary'));
  }

  public basicQueryBuilder(): any {
    return this.angularFirestore.collection('jobs', ref => ref
      .where('sector', '==', 'teacher')
      .where('brand', '==', 'all')
      .where('payType', '==', 'salary')
      .where('tags', 'array-contains', 'salary').limit(20));
  }

Вторая попытка:

  let query = this.angularFirestore.collection('jobs');
  query = query.where('sector', '==', 'teacher');
  query = query.where('brand', '==', 'all');

  return query.valueChanges();

Ошибка, которую я получаю:

Ошибка TS2322: Тип «Запрос» не может быть назначен типу «CollectionReference».

1 Ответ

0 голосов
/ 16 февраля 2019
import {Query, QueryFn } from '@angular/fire/firestore';

    this.angularFirestore.collection('jobs', ref => {
    let query : Query = ref;
    if(condition1) {
     query = query.where('sector', '==', 'teacher');
    }
    if(condition2) {
     query = query.where('brand', '==', 'all');
    }
    return query;
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...