У меня есть поле «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, она сработает. Любые идеи, почему это может происходить
Опечатка Я обновлю вопрос соответственно
.orderBy требует, чтобы поле вашего заказа было включено в whereField. См. Данные ордера и лимита





Здесь вы можете получить свой ответ в виде массива, а затем создать массив, как показано ниже:
self.arrCompletereq.sort(by: { ($0.actualdropOfDateTime ?? "")
.localizedStandardCompare($1.actualdropOfDateTime ?? "") == .orderedDescending})
Вот actualdropOfDateTime мой ключевой узел в базе данных
Вы предлагаете сортировать на стороне пользователя после получения всех документов?
@user6520705 user6520705 Да, этот код работает со мной, попробуйте.
Я хочу использовать фильтр .orderBy, чтобы я мог разбивать свои результаты на страницы.
@ user6520705 Пожалуйста, следуйте этому документу Google Firebase, надеюсь, он вам поможет firebase.google.com/docs/firestore/query-data/order-limit-daта
Спасибо, я сначала следил за этим, но не уверен, почему это не работает для меня.
Чтобы сделать что-то подобное, вам нужно будет создать составной индекс. При использовании обработчика ошибок в запросе вы увидите, что в сообщении об ошибке в консоли есть такое сообщение
The query requires an index. You can create it here: https://console.firebase.google.com/project...
Нажав на ссылку, вы сможете быстро создать индекс, необходимый для выполнения именно этого запроса. При необходимости вы можете отредактировать значение по умолчанию.
Почему
.whereField("author.uid", isEqualTo: uid)добавляется в запрос дважды?