无法在Firestore查询中使用whereLessThan()和whereGreaterThan()检索数据

时间:2018-08-21 21:18:03

标签: java android firebase google-cloud-firestore

我想使用由whereLessThan()whereGreaterThan()方法组成的查询从Firestore检索数据。但是,当我使用以下查询时,它将返回空快照:

Query query = firestore.collection("Users").whereLessThan("id",id).whereGreaterThan("id", id).orderBy("id");

但是当我仅使用1个子句时,它会成功检索数据:

Query query = firestore.collection("Users").whereLessThan("id",id); //Working Fine

我还尝试通过将snapshotListener附加到查询中来

query.addSnapshotListener(new EventListener<QuerySnapshot>() {
       @Override
       public void onEvent( QuerySnapshot queryDocumentSnapshots,  FirebaseFirestoreException e)
       {
           if(queryDocumentSnapshots.isEmpty()){
               Toast.makeText(RetrieveUserActivity.this, "No data found", Toast.LENGTH_SHORT).show();
           }
       }
   });

这显示未找到数据的吐司。

这是我的数据库结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则您正在尝试从id集合中排除具有特定Users的单个用户。如果是这样,则应该更改代码的逻辑,因为不幸的是,您无法以这种方式实现此目的。这就是为什么您获得空快照的原因。如果您将一直使用以下代码行:

Query query = firestore.collection("Users")
    .whereLessThanOrEqualTo("id",id)
    .whereGreaterThanOrEqualTo("id", id)
    .orderBy("id");

snapshot对象将仅包含一个结果,即具有该特定id的单个用户。上面的代码行也可以像这样更简单地编写:

    Query query = firestore.collection("Users")
    .whereEqualTo("id",id)
    .orderBy("id");

我为您提供了这些示例,以更好地了解此方法的工作方式。要解决您的问题,请根据有关Query limitations的官方文档:

  

Cloud Firestore 不支持以下类型的查询:

  •   

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

换句话说,Firestore中没有!=(不等于)运算符。您唯一的选择是将查询分为greater-thanless-than查询,然后它将很好地工作