#ios #swift #firebase #google-cloud-firestore
#iOS #swift #firebase #google-облако-firestore
Вопрос:
У меня есть поле «createdAt», которое является отметкой времени сервера, в firestore оно выглядит так
При выполнении моего запроса без .OrderBy это работает, но когда я добавляю фильтр заказов, он перестает работать. Я попытался изменить порядок .OrderBy и .whereField
let ref = Firestore.firestore().collection("posts")
.order(by: "createdAt", descending: true)
.whereField("author.uid", isEqualTo: uid)
и
let ref = Firestore.firestore().collection("posts")
.whereField("author.uid", isEqualTo: uid)
.order(by: "createdAt", descending: true)
Оба не работают, но если я закомментирую строку .OrderBy, это сработает.
Есть идеи, почему это может происходить
Комментарии:
1. Почему
.whereField("author.uid", isEqualTo: uid)
запрос добавляется дважды?2. Опечатка, я соответствующим образом обновлю вопрос
3. .OrderBy требует, чтобы поле, по которому вы оформляете заказ, было включено в поле whereField. Смотрите данные о порядке и ограничении
Ответ №1:
Здесь вы можете получить свой ответ в виде массива, а затем создать массив в виде сортировки, как показано в примере ниже:
self.arrCompletereq.sort(by: { ($0.actualdropOfDateTime ?? "")
.localizedStandardCompare($1.actualdropOfDateTime ?? "") == .orderedDescending})
Вот actualdropOfDateTime
мой один из ключевых в узле базы данных
Комментарии:
1. Вы предлагаете выполнить сортировку на стороне пользователя после получения всех документов?
2. @user6520705 Да, этот код работает со мной, пожалуйста, попробуйте.
3. Я хочу использовать фильтр .OrderBy, чтобы я мог разбивать свои результаты на страницы
4. @user6520705 Пожалуйста, следуйте этому документу Google firebase, надеюсь, это сработает для вас firebase.google.com/docs/firestore/query-data/order-limit-data
5. Спасибо, сначала я следил за этим, но не уверен, почему у меня это не работает
Ответ №2:
Для того, чтобы сделать что-то подобное, вам нужно будет создать составной индекс. При использовании обработчика ошибок в запросе вы увидите, что в сообщении об ошибке в консоли отображается сообщение, подобное этому
Для запроса требуется индекс. Вы можете создать ее здесь:https://console .firebase.google.com/project…
Нажав на ссылку, вы сможете быстро создать индекс, необходимый для выполнения именно этого запроса. При необходимости вы можете изменить значение по умолчанию.