I have doc which has a date object.
Code to init Firestore:
FirebaseFirestore fireStore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
fireStore.setFirestoreSettings(settings);
firestore = fireStore;
Code to query:
FirebaseFirestore db = FireStoreUtils.getInstance();
Query query= db.collection(viewType.collectionName());
query.whereLessThan("endDate", new Date());
return query.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
I am always getting all the records and looks like the where clause is not getting applied. On Firebase console I see that the endDate is stored as timestamp.
Doc from Firebase console:
createdDate: null (null) description: "desc" (string) endDate: February 3, 2019 at 11:18:58 PM UTC-8 (timestamp) id: "-7475596197450085332" (string) title: "title"
Advertisement
Answer
Cloud Firestore queries are immutable, which means that you cannot change the properties of an existing query. If you change the value by calling whereLessThan() method, it becomes a new query. So to solve this, please chain all method calls and store them in a new Query object like this:
Query query = db.collection(viewType.collectionName())
.whereLessThan("endDate", new Date());
.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
return query;