我正在尝试从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'.
我尝试寻找与!=
相对应的逻辑运算符,但似乎找不到它。
任何帮助将不胜感激!
答案 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)
);