我一直试图找出一种方法来查询我在一个字段上有一个范围过滤器并按另一个字段排序的文档列表,这当然是不可能的,请参阅我的另一个问题:{{3 }}
但是可以保存时间戳为id的文档然后默认排序吗?或者也许硬编码一个ID,然后检索最后创建的文档ID并将id增加一个以便上传下一个帖子?
这显示了如何在集合中订购文档
Order by timestamp with range filter on different field Swift Firestore
如何存储文档以便按照集合中的创建顺序排列?
答案 0 :(得分:1)
该文档记录不充分,但是您可以app1
进行操作。
Firebase在这里对此进行了讨论:
答案 1 :(得分:0)
Firebase控制台中显示的文档顺序与使用Firestore的代码的功能无关。控制台仅用于浏览数据,如果您知道其ID,那么排序方案可以相对直观地找到您可能正在查找的文档。您无法在控制台中更改此排序顺序。
您的代码显然会有其他要求,这些要求应该编码到您的查询中,而不考虑您在仪表板中看到的任何排序顺序。
答案 2 :(得分:0)
如果我正确理解您的需要,通过执行以下操作,您应该得到正确的顺序:
对于每个文档,添加类型编号的特定字段,例如sortNbr
,并为您计算的时间戳指定值(例如,纪元时间,请参阅Get Unix Epoch Time in Swift)
然后构建一个按此字段值排序的查询,如:
let docRef = db.collection("xxxx")
docRef.order(by: "sortNbr")
请参阅此处的文档:https://firebase.google.com/docs/firestore/query-data/order-limit-data
答案 3 :(得分:0)
是的,您可以这样做。
默认情况下,查询将检索满足以下条件的所有文档: 按文档ID升序。
在此处查看文档:{{3}}
因此,如果您找到了一种使用时间戳或其他主键值的方式,而您想要的是升序的字典顺序,则可以按任何字段进行过滤,并且结果仍按主键升序排序。
如果使用数字键(例如自纪元以来的秒数或整数序列),请小心将数字零填充到最大精度。 10在字典上小于2,但10大于02。
使用ISO格式的YYYY-mm-ddTHH:MM:SS
日期时间字符串会起作用,因为它们自然会以升序排序。