Порядок и лимит коллекций Firebase Firestore - PullRequest
0 голосов
/ 30 мая 2018

У меня есть подколлекция с путем /coll_A/document_A/coll_B, где coll_A / _B - коллекции.Я хочу запросить эту подколлекцию с упорядочением и пределом:

firestore.collection("coll_A")
        .document("document_A")
        .collection("coll_B")
        .orderBy("time", DESCENDING)
        .limit(10)
        .get()
        .addOnCompleteListener(...)

Но он всегда возвращает полную коллекцию.Что я делаю не так?

time - это временная метка.

Upd .: time - это просто пример, я раньше использовал целочисленное поле.Согласно ответу Алекса Мамо, он должен быть в состоянии заказать его.

Upd.2 Я попытался подготовить скриншот, удалил и заново добавил данные - и он начал работать.Данные все те же, иерархия collection-doc-collection, так что, вероятно, это своего рода сбой.

1 Ответ

0 голосов
/ 30 мая 2018

Чтобы решить эту проблему, ваша дата должна быть сохранена как 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...