【问题标题】:How to create a composite index in Firestore with document Id如何使用文档 ID 在 Firestore 中创建复合索引
【发布时间】:2020-12-10 09:17:47
【问题描述】:

所以我正在使用带有 swift 的 firebase cloud firestore(但这是 firestore 的一个普遍问题),我想使用查询对一些文档进行排序,例如

fetchQ.whereField(fieldName, isGreaterThan: startingValue)

但是如果字段具有相同的值,我想保证某种顺序,按理说文档id对此有好处,所以我添加

.order(by: FieldPath.documentID(), descending: false)

但现在我在控制台中收到错误消息,我必须在其中粘贴 url 才能创建复合索引。我这样做了,除了它只针对单个索引“fieldName”,省略了文档 ID,所以很明显我在尝试创建具有单个字段的复合索引时遇到错误。我还用两个字段加上文档 id 进行了尝试,果然 url 为这两个字段生成了一个复合索引,但省略了文档 id。

firebase 控制台中的复合索引页面也没有创建涉及文档 ID 的复合索引的选项。

所以在我看来,使用文档 ID 进行排序可能不是预期的做法?我应该为每个文档创建一个唯一的 id 以进行排序,还是我可以使用文档 id 来排序我应该怎么做?

【问题讨论】:

  • 按文档 ID 排序是一种不寻常的做法,因为它们在某种意义上是“随机的”(除非您将它们创建为基于时间戳的)。 order 函数通常是指正在查询的文档中的一个字段(而不是文档本身的 id)。我建议的解决方案是有一个时间戳字段并按此排序,或者只是按文档中的任何其他字段排序。
  • 嗯......在这种情况下,我不关心 id 的随机性,只是保证顺序。我确实使用时间戳,但在这种特殊情况下可以同时创建字段。我对创建另一个字段进行排序没有问题,我怀疑这就是我可能要做的。但我只是想知道是否可以使用 id。
  • 来自文档:“默认情况下,查询会按文档 ID 升序检索满足查询的所有文档”(firebase.google.com/docs/firestore/query-data/…)。因此,您想要实现的行为就是您开箱即用的行为。
  • @PeterFriese 是的,你是对的。我通过跳过句子来阅读文档并且我想多了。如果你想让它成为一个正确的答案,我会接受它。

标签: swift firebase google-cloud-firestore


【解决方案1】:

来自文档:“默认情况下,查询会按文档 ID 升序检索满足查询的所有文档”(firebase.google.com/docs/firestore/query-data/...)。因此,您想要实现的行为就是您开箱即用的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2019-12-03
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多