Чтобы решить эту проблему, ваша дата должна быть сохранена как Date
объект, как объяснено здесь , а не как число, как вы говорите.Чтобы решить эту проблему, измените запрос на:
firestore.collection("coll_A")
.document("document_A")
.collection("coll_B")
.orderBy("date", Query.Direction.DESCENDING)
.limit(10)
.get()
.addOnCompleteListener(...)
Согласно документации Firestore Поддерживаемые типы данных , вы можете отсортировать записи chronological
по датеи время.Сохранение даты и времени в виде ServerValue.TIMESTAMP было полезно при использовании базы данных Firebase Realtime.В новом Cloud Firestore вам нужно сохранить дату как объект Date
, чтобы иметь возможность сортировать записи по ней.Также см. Здесь информацию о ServerTimestamp :
Аннотация, используемая для пометки поля метки времени, которое должно быть заполнено меткой времени сервера.Если записываемый POJO содержит значение NULL для поля, помеченного @ ServerTimestamp, оно будет заменено сгенерированной сервером меткой времени.
Так что это правильный путь, которым вы можете достичь того, чего хотите.
Если вам интересно, это , как вы можете обновить дату в случае необходимости.
Редактировать:
Вы можете упорядочить по целым числам или строкам, но имейте в виду следующее: При упорядочении по строкам помните, что строки упорядочены лексикографически , а при заказе по date
вы получите chronological order
.
Объект, полученный в результате установки поля Cloud Firestore с помощью FieldValue.serverTimestamp () , является экземпляром java.util.Date .Когда вы позже прочитаете значение, вы можете получить время эпохи, используя getTime () .Вот почему команда Firebase добавила этот новый поддерживаемый тип данных, который более полезен, чем обычные данные, хранящиеся в виде чисел.
Если вы хотите улучшить свой запрос с большим ограничением, вы можете также использовать whereEqualTo()
, whereGreaterThan()
, whereGreaterThanOrEqualTo()
, whereLessThan()
или whereLessThanOrEqualTo()
.
В заключение, лучший способ сохранить дату - это сохранить объект Date
.