gpt4 book ai didi

angular - Firestore - 我想动态地将 where 语句添加到我的集合中

转载 作者:行者123 更新时间:2023-12-03 22:10:34 27 4
gpt4 key购买 nike

技术:我正在使用 Angular 7、Firestore、GeoFireX。

我想要的结果:如果用户需要该查询,我想添加 .where 查询。例如下面我有四个 .wheres。有时我可能只需要两个,因此如果用户按部门和品牌搜索,我只想使用 if 语句添加两个(参见方法:basicQueryBuilder)

下面的代码有效,但不是动态的。

此外,来自 GeoFireX 的 this.geo.collection 是否可以像普通集合一样具有 .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”类型。

最佳答案

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;
})

关于angular - Firestore - 我想动态地将 where 语句添加到我的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com