首页 > 解决方案 > 在 AngularFire 中查询集合时不能使用“不等于”运算符

问题描述

我正在尝试从与用户无关的 Firebase 中提取一个集合。到目前为止,我已经成功查询到了用户的收藏,但是我似乎无法使用!=操作符获取与用户无关的收藏。

这是我的代码:

  // Does not work!
  eventCollection: AngularFirestoreCollection<Event> = this.angularFirestore.collection("events", ref =>
    ref.where("uid", "!=", this.firebaseAuth.auth.currentUser.uid)
  );
  eventCollection$: Observable<Event[]> = this.eventCollection.valueChanges();

  // Works!
  myCollection: AngularFirestoreCollection<Event> = this.angularFirestore.collection("events", ref =>
    ref.where("uid", "==", this.firebaseAuth.auth.currentUser.uid)
  );
  myCollection$: Observable<Event[]> = this.myCollection.valueChanges();

抛出的错误是:

ERROR in src/app/event/events.service.ts(35,22): error TS2345: Argument of type '"!"' is not assignable to parameter of type 'WhereFilterOp'.

我尝试寻找与 对应的逻辑运算符!=,但似乎找不到。

任何帮助将不胜感激!

标签: angulartypescriptfirebasegoogle-cloud-firestoreangularfire2

解决方案


根据 Firestore文档

带有 != 子句的查询。在这种情况下,您应该将查询拆分为大于查询和小于查询。例如,虽然不支持查询子句 where("age", "!=", "30"),但是可以通过组合两个查询得到相同的结果集,其中一个是子句 where("age", "< ", "30") 和一个带有 where("age", ">", 30) 的子句。

所以你必须比较'<'和'>'条件

eventCollection: AngularFirestoreCollection<Event> = 
  this.angularFirestore.collection("events", ref =>
    ref.where("uid", ">", this.firebaseAuth.auth.currentUser.uid)
       .where("uid", "<", this.firebaseAuth.auth.currentUser.uid)
  );

推荐阅读