【问题标题】:Why is boolean true in firestore query (typescript)?为什么在firestore查询(打字稿)中布尔值是真的?
【发布时间】: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()
    )
  );
}

【问题讨论】:

  • 我错过了什么吗?如果activetrue,则active where 子句不会被添加到查询中吗? (因为它在if (active) 块内?)
  • 不,你当然是对的!谢谢!我想如果存在active 变量就会添加它,类似于module_version。但我想我必须改用if (active != null)

标签: angular typescript google-cloud-firestore boolean


【解决方案1】:

感谢评论线程中的澄清。如前所述,您的问题是:

if (active)

只有当active 本身为真时才会为真。所以只有当active 为真时才添加查询。

你想要的更像是:

if (typeof(active) !== 'undefined' && active !== null)

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2022-07-31
    相关资源
    最近更新 更多