猿问

FireStore 日期查询未按预期工作

我有一个包含日期对象的文档。


初始化 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" 


BIG阳
浏览 79回答 2
2回答

隔江千里

Cloud Firestore 查询是不可变的,这意味着您无法更改现有查询的属性。如果您通过调用whereLessThan()方法更改值,它将成为一个新的查询。因此,为了解决这个问题,请将所有方法调用链接起来,并将它们存储在一个新Query对象中,如下所示:Query query = db.collection(viewType.collectionName())    .whereLessThan("endDate", new Date());    .orderBy(viewType.sortProperty()).limit(PAGE_SIZE);return query;

GCT1015

我遇到了同样的问题,我比较和过滤日期的解决方案是这样的:请注意,firebase 存储Date不是Timestamp创建一个Date来比较,而是创建一个Timestamp。Timestamp记得从 Firebase导入:import com.google.firebase.Timestamp查询代码:val currentDate = Timestamp.now() // Firebase Date as TimestampFirebaseFirestore 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"我希望它有帮助!
随时随地看视频慕课网APP

相关分类

Java
我要回答