当前位置: 首页 > 面试题库 >

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

楮星鹏
2023-03-14
问题内容

我在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


问题答案:

如以下错误所述:

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

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

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

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

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

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



 类似资料:
  • 我对firestore(和编程)比较陌生,无法在网上找到解决问题的方法。 如果还有什么可能有帮助的,请告诉我。谢谢! 编辑以显示下一次尝试:

  • 问题内容: 下图显示了简单聊天应用程序的数据结构。当两个用户想要通信时,会在他们之间创建一个频道。成员字符串数组字段列出了用户名。 我想在登录用户的任何渠道收到消息时通知用户。不知道如何做到这一点。 我尝试下面的查询没有成功。有任何想法吗? 问题答案: 编辑:2018年9月12日 从开始,现在可以更新数组成员。更多信息在这里。 如关于数组的官方文档中所示: 尽管可以存储阵列,但可以查询阵列成员或更

  • 我试图创建自己的StopFilter实现,它将根据其他字段选择术语。 是否有一种方法可以从标记筛选器访问文档,然后访问其他字段? (我想使用UpdateRequestProcessor来通知我的TokenFilter关于状态的信息,但我没有找到很好的方法) 谢谢,本尼

  • 问题内容: 示例:存储在索引中的文档表示测试分数和有关每个测试的元数据。 我需要能够过滤掉除最低分数以外的所有分数,并为每个应试者返回与该测试相关的元数据。所以我的预期结果是: 我现在看到的唯一方法是,首先通过用户使用嵌套的最小聚合来进行术语聚合,以获得最低分。 然后,我必须获取该查询的结果,并对每个用户进行过滤查询,然后根据最低得分值进行过滤,以获取其余的元数据。Yu 我想知道是否有一种方法可以

  • 例如insert时需要忽略某个特定属性, update时只更新某些属性, 查询时需要跳过大字段等。 FieldFilter/FieldMatcher提供细致的过滤选项,包括: 黑名单(locked) 白名单(actived) 忽略空值(ignoreNull) 忽略数值0(ignoreZero) 忽略日期属性(ignoreDate) 忽略空字符串(ignoreBlankStr) 忽略数值型主键(ig