Google cloud firestore 地图和阵列上的Firestore索引-澄清

Google cloud firestore 地图和阵列上的Firestore索引-澄清,google-cloud-firestore,Google Cloud Firestore,我试图了解Firestore如何在字段上创建索引。给定以下示例文档,如何创建索引,尤其是针对映射/数组的索引 我多次阅读文档,但仍然不确定。上面写着: 自动索引 默认情况下,Cloud Firestore会自动为文档中的每个字段和地图中的每个子字段维护单个字段索引。Cloud Firestore对单字段索引使用以下默认设置: 对于每个非数组和非映射字段,Cloud Firestore定义了两个集合范围单字段索引,一个处于升序模式,另一个处于降序模式 对于每个映射字段,Cloud Firest

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

我多次阅读文档,但仍然不确定。上面写着:

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

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

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

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

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

如果我理解正确,则会为每个字段创建一个索引,甚至是为
alternate\u names
数组中的值创建索引

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


我的假设/理解正确吗?

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

Firestore将不允许未编制索引的查询。来自该故障的错误消息将包含指向控制台的链接,该链接将允许您创建该查询所需的索引(如果可能的话)


如果您想查询<代码>字段的内容。AddiTaleNeNeX/CODE >,请考虑将其升级到自己的顶级字段,默认情况下将索引。

<代码> FixSt店将不允许未被索引的查询。我不知怎么错过了这个信息。然后我只需要运行一个有效的查询并使用索引。我可能会将此字段提升为顶级字段,以确保它使用索引。谢谢。@doug stevenson继续,如果
备选名称
成为顶级字段,文档中现在还有5个索引。考虑到每个文档限制的索引项的最大数量为40000个,这是否意味着如果所有文档都只有
alternative\u names
字段,那么整个数据库中只能有40000个不同的alternative names?您能解释问题引号的最后两点吗?