【问题标题】:Firebase queries and compound indexesFirebase 查询和复合索引
【发布时间】:2019-08-09 10:55:46
【问题描述】:

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

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

我想每次都使用不同的“where”语句来查询这个集合。有时用户希望按类型 id 过滤,有时按 locationId 过滤,或者可能包括所有过滤器。

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

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

您能否帮我构建一个查询和索引以满足以下要求:查询所有字段的可能性,查询可以包含一个、两个、三个、全部或不包含在 where 子句中的字段,并且始终必须按降序排序通过 createdAt 订购。

【问题讨论】:

  • 你需要添加所有的索引
  • 这种情况下,firebase 没用!怎么会有人用?
  • @WildGoat 如果您不需要订单,您可以使用任何可能的排列,而无需创建索引。
  • 谢谢,但我需要 createdAt 的订单:(

标签: firebase google-cloud-firestore


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!您能否帮我为以下要求构建查询和索引:查询所有字段的可能性,查询可以包含一个、两个、三个、全部或不包含在 where 子句中的字段,并且始终必须按 createdAt 降序排列.
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多