小编典典

在不同字段上具有过滤器的字段上的Firestore查询顺序

java

我在Google Cloud Firestore中的查询条件有问题。

下面是我的代码,以获得第一个以HA_开头的文档并按ID DESC排序

public Article getLastArticleProvider() {
    ApiFuture<QuerySnapshot> query = firebaseDB.getTblArticles()
            .whereGreaterThanOrEqualTo("articleId", "HA_")
            .orderBy("id", Query.Direction.DESCENDING)
            .limit(1)
            .get();

    QuerySnapshot snapshotApiFuture;
    Article article = null;

    try {
        snapshotApiFuture = query.get();
        List<QueryDocumentSnapshot> documents = snapshotApiFuture.getDocuments();
        for (QueryDocumentSnapshot document : documents) {
            article = document.toObject(Article.class);
        }
    } catch (InterruptedException | ExecutionException e) {
        return null;
    }
    return article;
}

我想获取文章ID为“ HA_”或“ XE_”开头的文章的最后ID

例如上图:

  • if(articleId以“ HA_”开头)=>返回id 831的对象
  • if(articleId以“ XE_”开头)=>返回ID为833的对象
    现在我得到一个错误

java.util.concurrent.ExecutionException:
com.google.api.gax.rpc.InvalidArgumentException:
io.grpc.StatusRuntimeException:INVALID_ARGUMENT:不等式过滤器属性
和第一排序顺序必须相同:articleId和id


阅读 319

收藏
2020-11-26

共1个答案

小编典典

如以下错误所述:

不等式过滤器属性和第一排序顺序必须相同:articleId
和id

因此
,在您的案例articleId和中,您无法使用不同的属性对元素进行过滤并同时对其进行排序id。

官方 文档中还有一个示例,说明如何不这样做:

范围过滤器和一阶按不同字段

citiesRef.whereGreaterThan("population", 100000).orderBy("country"); //Invalid

因此,要解决此问题,您应该对同一文档属性进行过滤和排序。

2020-11-26