【问题标题】:How to order a query on multiple fields in firestore flutter如何在 firestore flutter 中对多个字段进行查询
【发布时间】:2023-01-22 21:36:37
【问题描述】:

我想使用 FlutterFirestore 中的多个字段进行查询。我使用FirebaseFirestore.instance.collection('sgees').orderBy('uid').orderBy('timestamp').get()。但我收到以下错误:

Listen for Query(target=Query(sgees order by uid, timestamp, __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/myfirebaseprojectname/firestore/indexes?create_composite=Ck9wcm9qZWN0cy9mbHV0dGVyLXNhbGFtLWFwcC9kYXRhYmFzZXMvKGRlZmF1bHQpL2NvbGxlY3Rpb25Hcm91cHMvc2dlZXMvaW5kZXhlcy9fEAEaBwoDdWlkEAEaDQoJdGltZXN0YW1wEAEaDAoIX19uYW1lX18QAQ
Unhandled Exception: [cloud_firestore/failed-precondition] The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/myfirebaseprojectname/firestore/indexes?create_composite=Ck9wcm9qZWN0cy9mbHV0dGVyLXNhbGFtLWFwcC9kYXRhYmFzZXMvKGRlZmF1bHQpL2NvbGxlY3Rpb25Hcm91cHMvc2dlZXMvaW5kZXhlcy9fEAEaBwoDdWlkEAEaDQoJdGltZXN0YW1wEAEaDAoIX19uYW1lX18QAQ

解决办法是什么?提前致谢。

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    要使用 Flutter 对 Firestore 中的多个字段进行查询排序,您可以在查询中将多个 orderBy 方法调用链接在一起。在您的示例中,您首先按“uid”字段对查询进行排序,然后按“timestamp”字段对查询进行排序。查询末尾的 get() 方法将执行查询并返回结果。

    但是,请务必注意,一次只能按一个字段对查询进行排序。因此,链接多个 orderBy 调用只会按最后一个指定的顺序排序。

    要按多个字段排序,您可以使用 .orderBy(fieldPath, directionStr),其中 fieldPath 是您要排序的字段的名称,directionStr 是“asc”或“desc”。

    FirebaseFirestore.instance.collection('sgees')
      .orderBy('uid', 'desc')
      .orderBy('timestamp', 'asc')
      .get();
    

    您看到的错误消息表明您尝试执行的查询需要在 Firestore 中创建索引。

    当您在 Firestore 中查询集合时,只有在索引能够满足查询时才能执行查询。索引是一种数据结构,它允许 Firestore 高效地在集合中查找与特定查询匹配的文档。默认情况下,Firestore 会为集合中的每个字段创建索引,但如果要执行涉及多个字段的查询,则需要为这些字段创建复合索引。

    错误消息包含指向 Firebase 控制台的链接,您可以在其中为查询创建复合索引。您需要转到链接并为“sgees”集合中的“uid”和“timestamp”字段创建复合索引。

    创建索引后,您的查询应该按预期工作。

    另外请记住,复合索引是在集合级别创建的,因此如果您有多个查询需要使用相同的索引,则只需创建一次。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 2020-07-14
      • 2023-03-09
      • 1970-01-01
      • 2021-03-11
      • 2021-09-01
      • 2016-07-20
      • 2021-06-05
      相关资源
      最近更新 更多