FireStore日期查询无法正常工作

问题描述 投票:1回答:2

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

初始化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" 
java android firebase google-cloud-firestore
2个回答
3
投票

Cloud Firestore查询是不可变的,这意味着您无法更改现有查询的属性。如果通过调用whereLessThan()方法更改值,则它将成为一个新查询。因此,要解决此问题,请链接所有方法调用,并将其存储在新的Query对象中,如下所示:

Query query = db.collection(viewType.collectionName())
    .whereLessThan("endDate", new Date());
    .orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
    return query;

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);

希望对您有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.