Firestore索引合并不相等条件?



我有以下查询:

.where("field1", "<", 10)
.where("field2", "==", false)
.where("field3", "==", "test1")
.where("field4", "==", "test2")

我试图理解为什么,尽管事实上没有确切对应的索引,这个查询实际上仍然有效。

经过一些研究,我发现唯一的解释是索引合并功能,但根据文档,这应该只在没有不等式条件时才有效,而这里不是这种情况。我一定是遗漏了什么,为什么我的查询是成功的?

仅供参考,我有以下索引与一些字段:

field1 DESC field2 ASC field3 ASC
field1 DESC field2 ASC field4 ASC

由于存在多个相等过滤器,因此这里看起来像是在进行索引合并。

在Firestore文档中,没有特别声明不相等条件会破坏索引合并的要求。

合并使用之字形连接,因此不包含不等式的子句不会被合并,但其他子句可以合并。以下是索引合并的细节和要求。

虽然Cloud Firestore为每个查询使用一个索引,但它并不一定需要每个查询一个索引。对于具有多个equal(==)子句和order子句(可选)的查询,Cloud Firestore可以重用现有索引。

看起来上面的查询符合这个条件。

最新更新