Firestore 按时间排序但按 ID 排序

use*_*871 10 firebase swift google-cloud-firestore

我一直在试图找出一种方法来查询文档列表,其中我在一个字段上有一个范围过滤器并按另一个字段排序,这当然是不可能的,请参阅我的另一个问题:按时间戳排序,范围过滤器在不同的现场 Swift Firestore

但是是否可以将带有时间戳的文档保存为 id,然后默认进行排序?或者可能对 ID 进行硬编码,然后检索上次创建的文档 ID 并将 id 增加 1 以上传下一篇文章?

这显示了文档在集合中的排序方式

这显示了文档在集合中的排序方式

任何想法如何存储文档,以便它们按在集合中创建的顺序进行排序?

Rya*_*lor 19

默认情况下,它将按文档 ID(升序)在 Swift 中排序

您可以使用.order(by: '__id__')更好/记录的方法是使用 FieldPath documentID() 我真的不了解 Swift 但我认为它类似于...

.order(by: FirebaseFirestore.FieldPath.documentID())
Run Code Online (Sandbox Code Playgroud)

JavaScript 也有一个内部变量,它只返回__id__.

.orderBy(firebase.firestore.FieldPath.documentId())
Run Code Online (Sandbox Code Playgroud)

有趣的是,它__name__也可以工作,但这对整个路径进行排序,包括集合名称(当然还有 id)。


Dou*_*son -2

Firebase 控制台中显示的文档顺序大多与使用 Firestore 的代码的功能无关。该控制台仅用于浏览数据,如果您知道文档的 ID,这种排序方案可以让您相对直观地找到您可能正在查找的文档。您无法在控制台中更改此排序顺序。

您的代码显然会有其他要求,并且这些要求应该编码到您的查询中,而不考虑您在仪表板中看到的任何排序顺序。如果您希望对文档进行基于时间的排序,则必须在文档中存储某种时间戳字段,并使用它进行排序。我不建议使用时间戳作为文档的 ID,因为这可能会在将来给您带来问题。

  • @DougStevenson,这不是偶然的行为:“默认情况下,查询会按文档 ID 按升序检索满足查询的所有文档。” (2认同)