【问题标题】:Cloud Firestore query result set is emptyCloud Firestore 查询结果集为空
【发布时间】:2017-11-25 12:21:37
【问题描述】:

我正在尝试对firebase docs here 中提供的示例数据运行以下查询:

cities.whereLessThan("population", 9000000)
        .whereGreaterThan("population", 9000000)
        .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if(task.isSuccessful()) {
            Logger.log_error(TAG + " Task successful Result is Empty = " + task.getResult().isEmpty());
        }else {
            Logger.log_error(TAG + " Task failed = " + task.getException().getMessage());
        }
    }
});

我希望得到人口少于 9000000 和大于 9000000 的城市。最终我想要实现的是: 通过在 FireStore 查询中组合 whereLessThan 和 whereGreaterThan,从 TABLE where population 9000000 中选择 *。

如果它根本不支持或者我在某个地方错了,有人可以告诉我吗?

【问题讨论】:

    标签: android google-cloud-firestore


    【解决方案1】:

    Firestore 查询条件被AND组合在一起。所以你要求的是:给我一个多于 900 万少于 900 万人口的城市。这是一个空集:没有哪个城市可以同时拥有多于少于 900 万的人口。

    【讨论】:

    • 我太傻了!我已经阅读了 10 次文档,但仍然错过了同样的内容。谢谢你的解释:)
    • 但是有没有办法实现我的目标?
    • 没有对“不等于”操作的内置支持。见stackoverflow.com/questions/47251919/…
    【解决方案2】:

    如果你还没有,我相信你必须创建一个Cloud Firestore index

    简而言之:

    Cloud Firestore 需要为每个查询创建一个索引,以确保最佳 表现。所有文档字段都被自动索引,因此查询 只使用相等子句的不需要额外的索引。如果你 尝试使用不映射到范围子句的复合查询 现有索引,您会收到错误。错误消息包括 在 Firebase 控制台中创建缺失索引的直接链接。

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2021-09-04
      • 2017-12-19
      • 2020-01-11
      相关资源
      最近更新 更多