带命令的Firestore时间戳记日期范围查询产生错误

时间:2019-06-20 10:06:22

标签: swift firebase google-cloud-firestore

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

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

索引 visitDate降序递增视图

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)

使用带日期范围的订单是否有问题?我需要为此创建一个特殊的索引吗?

感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

@Jay感谢您指出正确的方向。根据它说的文件,

  

但是,如果您的过滤器具有范围比较(<,<=,>,> =),则您的第一次订购必须在同一字段上:

所以我必须通过 visitDate 而不是视图来订购。