【问题标题】:Firebase Query in Flutter Not Returning ResultsFlutter中的Firebase查询不返回结果
【发布时间】:2021-03-24 18:00:06
【问题描述】:

我的颤振应用中有 2 个查询引用了 firebase 中的相同信息。一个由用户的 id 过滤,另一个由患者的 id 过滤。这两个查询都有效,但只有通过 uid 过滤的查询才能与 orderby 一起使用。为什么第二个查询不起作用?

按用户 ID 过滤的查询

FirebaseFirestore.instance
      .collection('alerts')
      .where('access', arrayContains: FirebaseAuth.instance.currentUser.uid)
      .orderBy('createdAt', descending: true)
      .snapshots(),

按患者 ID 过滤的查询

FirebaseFirestore.instance
      .collection('alerts')
      .where('patientId', isEqualTo: patient.id)
      //.orderBy('createdAt', descending: false)
      .snapshots(),

我在这个查询中注释掉了 orderBy,因为它导致它不返回任何结果。如果不使用 orderBy,我会得到我想要的结果,而不是我想要的顺序。

如果警报应与该用户相关联,则警报有一个名为“访问”的字段,其中包含用户 ID。警报上的“患者 ID”将警报与特定患者相关联。 第一个查询返回用户应该查看的所有警报。 第二个查询仅返回特定患者的警报。

【问题讨论】:

  • @SimonSot 这可能会有所帮助,但我已经在此表上为 createdAt 设置了一个索引,我是否应该添加另一个索引,其中还包括患者 ID 字段?
  • 是的,你也应该添加 where 。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

您需要在 Firebase 中为这两个查询创建索引。

【讨论】:

    【解决方案2】:

    回到这个问题,因为我实际上最终修复了它。就像提到的其他用户一样,我需要在 firebase 中创建索引才能使其正常工作。所以我去 firebase 为我的警报集合创建了一个索引,并将 patientID 和 creationDate 都添加为降序到索引。保存该索引,等待它发布到 Firebase,然后返回 Flutter 并且它工作了。

    之后我遇到了另一个问题,即警报没有按正确的顺序显示,所以我只是将 orderBy 中的降序更改为 true 而不是 false,一切都解决了。

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2016-08-14
      • 2021-07-31
      • 2019-09-18
      • 2012-05-08
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多