地图和数组上的Firestore索引-澄清

时间:2019-05-12 17:55:12

标签: google-cloud-firestore

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

enter image description here

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

  

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

     
      
  • 对于每个非数组和非地图字段,Cloud Firestore定义了两个集合范围的单字段索引,一个在升序模式下,一个在降序模式下。

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

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

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

  •   

如果我正确理解这一点,那么将为每个字段(甚至是alternate_names数组中的值)创建一个索引。

因此,如果我要搜索fields.alternate_names包含(例如)“ Caofang”值的任何文档,则Firestore将使用索引进行搜索

我的假设/理解正确吗?

1 个答案:

答案 0 :(得分:0)

不,您的理解不正确。 fields.alternate_names是映射字段中的一个数组子字段,这意味着它不能满足第二点的要求。您可以简单地通过发出查询来测试您的假设。如果查询失败,您将在错误消息中看到由于缺少索引而导致查询失败。

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

如果您希望能够查询fields.alternate_names的内容,请考虑将其提升为它自己的顶级字段,默认情况下会对其进行索引。