Хобрук: Ваш путь к мастерству в программировании

Запрос диапазона дат метки времени Firestore с указанием порядка генерирования ошибки

Я написал запрос для фильтрации некоторых данных на основе диапазона дат и хочу упорядочить результат по какому-либо полю (Int). Написанный мной код генерирует исключение «FIRInvalidArgumentException».

Если я убрал «порядок по», запрос будет выполнен отлично. Я уже создал индекс для полей 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)

Есть ли проблема с использованием порядка по с диапазоном дат? Нужно ли мне для этого создавать специальный индекс?

Цените всю помощь.


  • Пожалуйста, включите точное, полное сообщение об ошибке и трассировку стека в свой вопрос, так как он обычно содержит важную информацию о причине проблемы. 20.06.2019
  • Это неверный запрос Firestore. Вы должны заказать по тому же полю, которое вы использовали для диапазона. Данные для заказа и ограничения. Нижний пример вы не можете использовать Range filter и first orderBy для разных полей. Лучше всего удалить порядок и просто отсортировать код после загрузки данных. 20.06.2019

Ответы:


1

@ Джей, спасибо, что указал мне правильное направление. Согласно документации, в нем говорится:

Однако, если у вас есть фильтр со сравнением диапазонов (‹,‹ =,>,> =), ваш первый заказ должен быть в том же поле:

Поэтому мне нужно заказать его по дате посещения, а не по просмотрам.

23.06.2019
Новые материалы

Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

AST для разработчиков JavaScript
TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

5 проектов на Python, которые нужно создать прямо сейчас!
Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..