Диапазон дат запроса Firestore - PullRequest
0 голосов
/ 26 марта 2019

У меня есть диапазон дат в моих документах (с использованием объектов даты) что-то вроде этого

{
  start: March 5
  end: April 7
}

Я пытаюсь выяснить, как построить запрос для возврата всех событий, которые охватывают определенный день, например, March 27, например ....

Запрос, который говорит что-то вроде get all documents whose starting date is before march 27th, and the ending date is after march 27th, но похоже, что это невозможно с ограничениями запроса Firestore.

Так что я часами ломал голову над тем, чтобы либо создать запрос для этого, либо структурировать свои данные каким-либо образом, который позволил бы это.

Это вообще возможно?

1 Ответ

0 голосов
/ 12 апреля 2019

Просто используйте меньше и больше этого запроса. Например, в моем приложении Android для прослушивания снимков (прослушивания обновлений) я сделал что-то вроде этого:

    ListenerRegistration registration;
    String lessDate = "09/04/2019 23:59:59";
    String greaterDate = "11/04/2019 23:59:59";
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss", Locale.getDefault());
    try {
        Date lDate = dateFormat.parse(lessDate);
        Date gDate = dateFormat.parse(greaterDate);
        Query q = db.collection("collection").whereGreaterThan("createdAt", new Timestamp(lDate))
                .whereLessThan("createdAt", new Timestamp(gDate));
        registration = q.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot value,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.i("FIRESTORE ERROR", "Listen failed.", e);
                    return;
                }
                for (DocumentChange doc : value.getDocumentChanges()) {
                    // What ever you want to do.
                }
            }
        });
    } catch (ParseException e) {
        e.printStackTrace();
    }

Для дат вы можете фактически получить дату из системы или получить информацию от пользователя и настроить ее в соответствии с вашими потребностями. Дайте мне знать, если вам нужна помощь.

...