【问题标题】:Firestore index on maps and array - clarification地图和数组上的 Firestore 索引 - 说明
【发布时间】:2019-09-29 19:11:37
【问题描述】:

我试图了解 Firestore 如何在字段上创建索引。给定以下示例文档,如何创建索引,尤其是对于地图/数组?

我多次阅读Index types in Cloud Firestore 的文档,但我仍然不确定。上面写着:

自动索引 默认情况下,Cloud Firestore 会自动为文档中的每个字段和地图中的每个子字段维护单字段索引。 Cloud Firestore 对单字段索引使用以下默认设置:

  • 对于每个非数组和非映射字段,Cloud Firestore 定义了两个集合范围的单字段索引,一个为升序,一个为降序。

  • 对于每个地图字段,Cloud Firestore 为地图中的每个非数组和非地图子字段创建一个集合范围升序索引和一个降序索引。

  • 对于文档中的每个数组字段,Cloud Firestore 都会创建并维护一个集合范围的数组包含索引。

  • 默认情况下不维护具有集合组范围的单字段索引。

如果我理解正确,那么每个字段都会创建一个索引,即使是 alternate_names 数组中的值也是如此。

因此,如果我想搜索 fields.alternate_names 包含(例如)“草房”值的任何文档,那么 Firestore 将使用索引进行搜索

我的假设/理解正确吗?

【问题讨论】:

    标签: google-cloud-firestore


    【解决方案1】:

    不,您的理解不正确。 fields.alternate_names是map字段中的一个数组子字段,也就是说它不能满足第二点的要求。您只需发出查询即可测试您的假设。如果查询失败,您将在错误消息中看到由于缺少索引而失败。

    Firestore 将根本不允许未编入索引的查询。该失败的错误消息将包含一个指向控制台的链接,如果可能的话,您可以使用该链接创建该查询所需的索引。

    如果你希望能够查询到fields.alternate_names的内容,可以考虑将其提升为自己的顶级字段,默认会被索引。

    【讨论】:

    • Firestore will simply not allow queries that are not indexed。我不知何故错过了这个信息。然后我只需要运行一个有效的查询并使用一个索引。我可能会将这个字段提升为顶级字段,以确保它使用索引。谢谢。
    • 你能解释一下问题引用的最后两点吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2020-01-31
    • 2021-06-13
    相关资源
    最近更新 更多