如何从firestore获取集合,但一个列表除外

时间:2018-06-17 06:00:17

标签: angular firebase ionic3 google-cloud-firestore

我正在使用firestore来存储我的数据,我想从我的数据库中获取一组用户,除了一个(当前用户)。我怎么能这样做。

这是我的数据库

的图像

enter image description here

在这里,我想要获取除id' gi3oGztVrKQoiEHxFv28TAQpxah2'

之外的所有用户

我目前使用的代码是

this.donorCollection = this.fireStore.collection<any>('users').valueChanges(); console.log(this.donorCollection); this.donorCollection.subscribe(data => console.log(data) );

返回所有用户。这个特定任务的原因是我的当前用户总是在他/她的位置改变时更新他/她的数据库。因此,如果我将valuechanges()应用于当前集合,它将始终提供新值,因为当前用户正在更新他/她的位置。

3 个答案:

答案 0 :(得分:0)

您不能使用Firestore查询排除文档。使用Firestore查询,您可以指定必须为true的所有条件(其中x和y和z等)。

也就是说,如果您要做的就是排除一个文档,那么在客户端上过滤查询结果是微不足道且便宜的。

答案 1 :(得分:0)

只需从集合中过滤,如下所示,

this.donorCollection.subscribe((data) => {
 this.users = data.filter(person => person.id != 'gi3oGztVrKQoiEHxFv28TAQpxah2');
 console.log(this.users) ;
});

答案 2 :(得分:0)

我能够通过引用它来解决这个问题 -

Queries with a != clause. In this case, you should split the query into a greater-than query and a less-than query. For example, although the query clause where("age", "!=", "30") is not supported, you can get the same result set by combining two queries, one with the clause where("age", "<", "30") and one with the clause where("age", ">", 30).

由于我的phone字段是唯一的。我通过调用查询解决了这个问题,如下所示

this.donorCollectionLR = this.fireStore.collection<any>('users', ref =>
      ref.where('phone', '<', '8086960113')).valueChanges();
      this.donorCollectionLR.subscribe(data =>{
        this.donorCollectionGR = this.fireStore.collection<any>('users', ref =>
        ref.where('phone', '>', '8086960113')).valueChanges();
        this.donorCollectionGR.subscribe(data2 =>{
          data2=data2.concat(data);
          observer.next(data2)
        });
      });