【发布时间】:2019-11-16 20:59:41
【问题描述】:
我正在使用 AngularFire 在 Angular 8 中查询 Firestore。当我查询一个字符串(例如下面的代码中的module_version)时,它可以工作,但是尝试在 Firestore 中查询一个布尔字段在下面的代码中不能正常工作。我只能使用active==true 获取所有对象,而不是false。当我将布尔变量 active 悬停在查询中(在 VSCode 中)时,它会显示“var active: true”,而不是我预期的“var active: boolean”。我猜这是问题所在,因为我可以查询true,但不能查询false。悬停字符串变量module_version 给出“var module_version: string”。 (我已经阅读了有关 Javascript 中真/假问题的答案,但没有从中得到更明智的答案。)
为什么我的变量似乎自动设置为true,我该怎么办?
constructor(afs: AngularFirestore) {
this.activeFilter$ = new BehaviorSubject(null);
this.module_versionFilter$ = new BehaviorSubject(null);
this.modules$ = combineLatest(
this.activeFilter$,
this.module_versionFilter$
).pipe(
switchMap(([active, module_version]) =>
afs.collection<Module>('Modules', ref => {
let query : firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
if (active) { query = query.where('active', '==', active) };
if (module_version) { query = query.where('module_version', '==', module_version) };
return query;
}).valueChanges()
)
);
}
【问题讨论】:
-
我错过了什么吗?如果
active是true,则activewhere 子句不会被添加到查询中吗? (因为它在if (active)块内?) -
不,你当然是对的!谢谢!我想如果存在
active变量就会添加它,类似于module_version。但我想我必须改用if (active != null)。
标签: angular typescript google-cloud-firestore boolean