Я использую 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это новый добавленный документ.
Я хочу сделать запрос с отметкой времени, но если я не смогу решить эту проблему с подсчетом, я изменю свой код.