关于swift:Firestore时间戳日期范围查询与order by生成错误 | 珊瑚贝

Firestore timestamp date range query with order by generate an error


我编写了一个查询来根据日期范围过滤一些数据,并希望按某个字段 (Int) 对结果进行排序。我编写的代码生成”FIRInvalidArgumentException”异常。

如果我删除了”order by”,那么查询将完美执行。我已经为 visitDate 和 views 字段创建了索引。

索引:visitDate 升序视图降序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let calendar = Calendar.current

let currentDateComponents = DateComponents(
  calendar: calendar,
  year: calendar.component(.year, from: Date()),
  month: calendar.component(.month, from: Date()),
  day: calendar.component(.day, from: Date()),
  hour: 0,
  minute: 0)

guard let currentDate = calendar.date(from: currentDateComponents) else {
  print(“error”);
  return
}

guard let weekEndDate = calendar.date(byAdding: .day, value: -7, to: currentDate) else {
  print(“error”);
  return
}

let queryRef = Firestore.firestore().collection(“ArticleVisits”)
  .whereField(“visitDate”, isGreaterThanOrEqualTo: weekEndDate)
  .whereField(“visitDate”, isLessThanOrEqualTo: currentDate)
  .order(by:”views”, descending: true)
  .limit(to: limit)

在日期范围内使用 order by 有什么问题吗?我需要为此创建一个特殊的索引吗?

感谢所有帮助。

  • 请在您的问题中包含准确、完整的错误消息和堆栈跟踪,因为它通常包含有关问题原因的重要信息。
  • 这不是有效的 Firestore 查询。您必须按照用于该范围的相同字段进行排序。订购和限制数据。底部示例您不能在不同字段上执行范围过滤器和一阶排序。最好的办法是删除 order by 并在加载数据后在代码中排序。


@Jay 感谢您为我指明正确的方向。根据它说的文档,

However, if you have a filter with a range comparison (<, <=, >, >=), your first ordering must be on the same field:

所以我必须通过 visitDate 而不是 view 来订购它。


来源:https://www.codenong.com/56683624/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?