Как запросить данные за последние 7 дней из Firestore Android - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу запросить данные Cloud Firestore за последние 7 дней.Я использую метку времени сервера Firestore, также сохраняя время в миллисах.

CollectionReference IOTransactions = db.collection(userID)
                .document("userData").collection("StockTransactions");

        Query transactionsQuery = IOTransactions.orderBy("timestamp",Query.Direction.DESCENDING);

        transactionsQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w("FirestoreDemo", "Listen failed.", e);
                    return;
                }
                for (QueryDocumentSnapshot doc : queryDocumentSnapshots) {
                    if (doc.get("timestamp") != null)
                        transactionsList.add(doc.toObject(StockTransaction.class));
                    Log.d("Firestore", "Added item");
                }

                if(transactionsList.size() < 1 )
                    emptyTransactionsPage.setVisibility(View.VISIBLE);

                Log.d("Firestore Reading", "Successfully fetched");
                adapter.notifyDataSetChanged();
                pb.setVisibility(View.INVISIBLE);

            }
        });

Как я могу запросить данные, созданные за последние 7 дней?

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Согласно My Knowledge, вы также можете использовать следующий запрос для получения результата

Query query = mdb.collection("$YOUR_COLLECTION_NAME").orderBy("$YOUR_FIELD")
               .whereGreaterThan("$YOUR_FIELD",$Begin_Date_Object)
               .endAt($YOUR_DATE_OBJECT);

Примечание: Вам необходимо объявить Java.Util.Date объект в поле endAt и orderBy должны всегда быть перед методом startAt () или endAt ().

Конец at ищет все документы, содержащие конец в значении поля в orderBy

0 голосов
/ 16 февраля 2019

Я использую метку времени сервера Firestore, также сохраняющую время в миллисекундах.

Так что, если вы храните метку времени в миллисекундах, вы делаете это неправильно.

Как я могу запросить данные, созданные за последние 7 дней.

Чтобы иметь возможность запрашивать вашу базу данных по периоду времени, ваше свойство метки времени должно иметь тип o Date и не долго.Чтобы увидеть, как этого добиться, пожалуйста, посмотрите на мой ответ из этого post .

После того как свойство установлено правильно, запрос выглядит такэто должно сработать:

IOTransactions.whereLessThan("timestamp", now).whereGreaterThan("timestamp", sevenDayAgo);

, в котором now и sevenDayAgo - это два Date объекта, представляющих настоящее время и момент времени семь дней назад.

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