在AngularFire中查询集合时无法使用“不等于”运算符

时间:2018-08-16 16:19:58

标签: angular typescript firebase google-cloud-firestore angularfire2

我正在尝试从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'.

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

It looks like没有!=运算符。我对Firebase并不熟悉,但是也许您可以对<>进行单独的查询并合并结果?还是因为您也想要相等的结果,所以仅执行一个不带where的查询,然后自己将相等和不相等的结果分开?

答案 1 :(得分:0)

根据Firestore doc

  

带有!=子句的查询。在这种情况下,您应该将查询分为大于查询和小于查询。例如,尽管不支持查询子句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)
  );