Firebase查询和复合索引

时间:2019-08-09 10:55:46

标签: firebase google-cloud-firestore

我在firebase中具有以下文档结构:

{
 typeId: number,
 tripId: number,
 locationId: string,
 expenseId: number,
 createtAt: timestamp
}

我想每次使用不同的“ where”语句查询此集合。有时用户想要按类型ID进行过滤,有时要按locationId进行过滤,或者可能包括所有过滤器。

但是似乎我需要为每个可能的排列创建一个复合索引?例如:typeId + expenseId, typeId + locationId, location + expenseId,等,否则它将不起作用。

如果我有20个字段,并且希望能够搜索所有这些字段怎么办?

能否请您为以下要求构建一个查询和索引:可以查询所有字段,查询可以包含where子句中包含的一个,两个,三个,所有或不包含字段,并且始终必须按降序排列由createdAt排序。

1 个答案:

答案 0 :(得分:1)

Cloud Firestore自动为文档的各个字段创建索引。因此,它可以在每个字段上进行过滤,而无需手动添加这些索引。

在许多情况下,通过执行所谓的zig-zag-merge-join,可以组合这些索引以允许对字段组合进行查询。

除过滤子句外,通常仅在向查询添加排序子句后才需要自定义其他索引。如果遇到这种情况,Firestore客户端将记录一条错误消息,告诉您确切要创建的索引(带有指向Firestore控制台的链接,该链接已预先填充为您创建了索引)。