Запрос для firestore с помощью метода whereGreaterThan () считает все данные как показания - PullRequest
0 голосов
/ 23 февраля 2019

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

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

    Query transactionsQuery = IOTransactions
            .whereLessThan("timestamp", dateOfToday())
            .whereGreaterThan("timestamp", findDaysAgo())
            .orderBy("timestamp", Query.Direction.DESCENDING)
            .limit(20);
    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 (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
                switch (dc.getType()) {
                    case ADDED:
                        Log.d(TAG, "New city: " + dc.getDocument().getData() + " |||| " +queryDocumentSnapshots.);
                        String doc_id = dc.getDocument().getId();
                        transactionsList.add(dc.getDocument().toObject(StockTransaction.class));
                        break;
                    case MODIFIED:
                        Log.d(TAG, "Modified city: " + dc.getDocument().getData());
                        break;
                    case REMOVED:
                        Log.d(TAG, "Removed city: " + dc.getDocument().getData());
                        transactionsList.remove(dc.getOldIndex());
                        adapter.notifyItemRemoved(dc.getOldIndex());
                        break;
                }
            }

Моя проблема заключается в том, что если документ добавлен в коллекцию, я вижу в консоли Firestore, что он считает все документыв результате, как «документ читает», а не только новый добавленный документ.Я проверил, использует ли он кэш с методом getMetaData (). IsFromCache (), и он возвращает true.

Однако, если я удаляю методы where и использую подобные

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

, то он учитывается только 1это новый добавленный документ.

Я хочу сделать запрос с отметкой времени, но если я не смогу решить эту проблему с подсчетом, я изменю свой код.

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