【问题标题】:Streambuilder from firebase firestore with advanced filtering来自具有高级过滤功能的 firebase firestore 的 Streambuilder
【发布时间】:2021-05-23 10:04:17
【问题描述】:

基于flutter中新版firebase依赖,there is new filters isNotEqualTo、arrayContains、arrayContainsAny、whereIn等。

我尝试使用一些过滤器创建流构建器,我想获取符合这些条件的文档。

  1. “uid”字段值不等于当前 uid。 (isNotEqualTo)
  2. “学校”字段值 isEqualTo 当前用户学校。(isEqualTo)
  3. “随机”字段值 isGreaterThanOrEqualTo 应用生成的随机数 (isGreaterThanOrEqualTo)

流:fireStore.collection(USERS_COLLECTION).where(UID_FIELD, isNotEqualTo: me.uid).where(SCHOOL_FIELD, isEqualTo: me.school).where(RANDOM_FIELD, isGreaterThanOrEqualTo: 随机).limit(10).snapshots(),

条件 1 (isNotEqualTo) 不适用于我,但条件 2 和 3 工作正常,当我添加过滤器 1 时出现错误显示给我。

所有带有不等式( 或 >=)的过滤器必须位于 同一个领域。但是您在 'FieldPath([uid])' 和 '字段路径([随机])'。 '包:cloud_firestore/src/query.dart': 断言失败:第 486 行第 18 行:'hasInequality == field'

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    这是 Firestore 的限制 https://firebase.google.com/docs/firestore/query-data/queries

    请注意 != 查询的以下限制:

    只有给定字段存在的文档才能匹配查询。 您不能在复合查询中组合 not-in 和 !=。 在复合查询中,范围 (, >=) 和 != 比较必须都过滤同一字段。

    因此,您可以在 uid 上使用 != 进行过滤,也可以在 Random 上使用 >= 进行过滤。 您不能在同一个查询中同时执行这两项操作。

    我建议在不使用 UID 的情况下进行过滤,并让您的存储库稍后在您收到快照后过滤掉 UID。

    【讨论】:

    • 感谢您的重要说明,收到文件后如何过滤,您能给我举个例子或参考吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2020-08-04
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多