我编写了一个查询,以根据日期范围过滤一些数据,并希望按某个字段(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)
使用带日期范围的订单是否有问题?我需要为此创建一个特殊的索引吗?
感谢所有帮助。
答案 0 :(得分:1)
@Jay感谢您指出正确的方向。根据它说的文件,
但是,如果您的过滤器具有范围比较(<,<=,>,> =),则您的第一次订购必须在同一字段上:
所以我必须通过 visitDate 而不是视图来订购。