我有一个带有日期对象的文档。
初始化Firestore的代码:
FirebaseFirestore fireStore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
fireStore.setFirestoreSettings(settings);
firestore = fireStore;
要查询的代码:
FirebaseFirestore db = FireStoreUtils.getInstance();
Query query= db.collection(viewType.collectionName());
query.whereLessThan("endDate", new Date());
return query.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
我总是在获取所有记录,并且看起来where子句没有得到应用。在Firebase控制台上,我看到endDate
被存储为时间戳。
Firebase控制台中的文档:
createdDate: null (null)
description: "desc" (string)
endDate: February 3, 2019 at 11:18:58 PM UTC-8 (timestamp)
id: "-7475596197450085332" (string)
title: "title"
答案 0 :(得分:2)
Cloud Firestore查询是不可变的,这意味着您无法更改现有查询的属性。如果通过调用whereLessThan()
方法来更改值,则它将成为一个新查询。因此,要解决此问题,请链接所有方法调用,并将它们存储在新的Query
对象中,如下所示:
Query query = db.collection(viewType.collectionName())
.whereLessThan("endDate", new Date());
.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
return query;
答案 1 :(得分:0)
我遇到了同样的问题,我比较和过滤日期的解决方案是这样:
请注意,firebase将Date
存储为Timestamp
,因此,我创建了Date
,而不是创建要比较的Timestamp
。
请记住要从Firebase导入Timestamp
:
import com.google.firebase.Timestamp
要查询的代码:
val currentDate = Timestamp.now() // Firebase Date as Timestamp
FirebaseFirestore db = FireStoreUtils.getInstance();
Query query= db.collection(viewType.collectionName());
query.whereLessThan("endDate", currentDate.toDate());
return query.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
我正在使用Firebase版本:
implementation "com.google.firebase:firebase-firestore-ktx:21.3.1"
希望对您有帮助!