【问题标题】:Firestore Flutter select where not equals and where not in [duplicate]Firestore Flutter选择不等于和不在[重复]
【发布时间】:2020-03-20 03:17:42
【问题描述】:

是否有可能在 Flutter Firestore 中使用

  1. 选择哪里不等于?类似于 SQL 的东西:SELECT * FROM tbl WHERE id != 2
  2. 选择不在哪里?类似于 SQL 的东西:SELECT * FROM tbl WHERE id NOT IN [1,3,6]

在 firebase 文档页面上,他们有 in and array-contains-any,但没有显示颤振示例。

https://firebase.google.com/docs/firestore/query-data/queries

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    不支持带有 != 子句的查询。在这种情况下,将查询拆分为大于查询和小于查询。例如,虽然不支持查询子句 where("age", "!=", "30"),但是可以通过组合两个查询得到相同的结果集,其中一个是子句 where("age", "", 30) 的子句。

    Firestore 不支持 != 的直接等效项。支持的查询运算符是 或 >=,因此没有“whereNotEqual”。

    您可以测试一个字段是否存在,因为所有过滤器和排序依据都会隐式创建一个过滤器来判断字段是否存在。例如,在 Android SDK 中:

    collection.orderBy("name")
    

    将只返回那些包含“名称”字段的行。

    与显式比较一样,无法反转此查询以返回值不存在的那些行。

    有一些解决方法。最直接的替换是显式存储null然后查询collection.whereEqualTo("name", null)。不过这有点烦人,因为如果您不从一开始就填充它,那么一旦您想要这样做,就必须回填现有数据。如果您无法升级所有客户端,则需要部署一个函数来填充此字段。

    另一种可能性是观察到通常缺失的字段表明文档仅部分组合,这可能是因为它通过了某个状态机或者是两种非重叠类型的联合。如果您将状态或类型明确记录为判别式,则可以查询该状态或类型,而不是字段不存在。这在只有两种状态/类型时非常有效,但如果有很多状态就会变得混乱。

    来源: Cloud Firestore whereNotEqual

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2016-05-06
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多