首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按时间排序,按ID排序

按时间排序,按ID排序
EN

Stack Overflow用户
提问于 2018-04-24 21:10:35
回答 4查看 20.3K关注 0票数 10

我一直试图找出一种方法来查询文档列表,在其中一个字段上有一个范围筛选器,然后按另一个字段排序,当然这是不可能的,请参阅我的另一个问题:在不同字段上用范围滤波器按时间戳排序快速修复

但是,是否可以将带有时间戳的文档保存为id,然后默认情况下进行排序?或者是硬编码一个ID,然后检索最后创建的文档id并将id增加一个以供下一个帖子上传?

这显示了如何在集合中排序文档。

有什么想法吗?如何存储文档,以便在集合中创建它们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-24 21:48:38

Firebase控制台中显示的文档顺序与使用Firestore的代码的功能基本无关。控制台只用于浏览数据,而排序方案使得如果您知道文档的ID,就可以比较直观地找到您可能要查找的文档。您不能在控制台中更改这种排序顺序。

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

票数 -2
EN

Stack Overflow用户

发布于 2019-06-17 15:24:51

它会默认情况下按文档ID (升序)在Swift中进行排序

你可以用.order(by: '__id__'),但更好的/文档化的方法是使用FieldPath documentID(),我不太认识斯威夫特,但我想这有点像.

代码语言:javascript
复制
.order(by: FirebaseFirestore.FieldPath.documentID())

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

代码语言:javascript
复制
.orderBy(firebase.firestore.FieldPath.documentId())

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

票数 19
EN

Stack Overflow用户

发布于 2018-04-24 22:08:38

如果我正确地理解了您的需要,通过执行以下操作,您应该得到正确的顺序:

对于每个文档,添加一个类型为number的特定字段,例如sortNbr,并将计算的时间戳赋值为值(例如,划时代时间,参见在Swift中获取Unix时代的时间)

然后构建对此字段值排序的查询,如下所示:

代码语言:javascript
复制
let docRef = db.collection("xxxx")
docRef.order(by: "sortNbr")

见这里的文档:https://firebase.google.com/docs/firestore/query-data/order-limit-data

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50010771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档