【问题标题】:Firestore - Use a Where Clause and startAt with different fieldsFirestore - 使用 Where 子句和 startAt 具有不同的字段
【发布时间】:2020-10-10 06:00:23
【问题描述】:

我有点纠结在 Firestore 的 Android SDK 中创建查询。我想将文档限制为仅来自过去一周的文档,以减少文档数量,并使用用户提供的文本过滤结果。我想使用whereGreaterThan 子句和created 字段作为日期,startAtendAt 子句用于过滤id 字段。

但是,有一个问题。 SDK 要求第一个orderBy 子句使用与whereGreaterThan 子句相同的字段。另一方面,startAtendAt 似乎也绑定到第一个 orderBy 子句。

Calendar oneWeekAgo= Calendar.getInstance();
oneWeekAgo.add(Calendar.DATE, -7);
Query query = firestore.collection(BuildConfig.FULL_PATH)
.whereGreaterThan("created",oneWeekAgo.getTime())
.orderBy("created", Query.Direction.ASCENDING)
.orderBy("id", Query.Direction.ASCENDING)
.startAt(filter)
.endAt(filter + "z");

有没有办法将 .startAt 和 .endAt 绑定到第二个 orderBy?或者以其他方式实现从某个日期之后创建的 firestore 获取过滤文档的目标?

如果我删除 whereGreaterThan 和第一个 orderBy 子句,查询会从所有文档中获取过滤结果,而不仅仅是在过去一周创建的文档。

【问题讨论】:

    标签: android google-cloud-firestore


    【解决方案1】:

    这是 API 的 limitation,因为 Cloud Firestore 不支持按与提供的不等式不同的字段进行排序。在这种情况下,您应该在客户端订购数据,在这种情况下是您的 Android 应用程序。这也解释了here

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 2022-12-01
      • 2021-07-07
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多