Не работает отметка времени сервера Firestore .OrderBy SWIFT

#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

Нажав на ссылку, вы сможете быстро создать индекс, необходимый для выполнения именно этого запроса. При необходимости вы можете изменить значение по умолчанию.