为了账号安全,请及时绑定邮箱和手机立即绑定

FireStore 日期查询未按预期工作

FireStore 日期查询未按预期工作

BIG阳 2022-06-04 09:43:33
我有一个包含日期对象的文档。初始化 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" 
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

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


Query query = db.collection(viewType.collectionName())

    .whereLessThan("endDate", new Date());

    .orderBy(viewType.sortProperty()).limit(PAGE_SIZE);

return query;


查看完整回答
反对 回复 2022-06-04
?
GCT1015

TA贡献1827条经验 获得超4个赞

我遇到了同样的问题,我比较和过滤日期的解决方案是这样的:


请注意,firebase 存储Date不是Timestamp创建一个Date来比较,而是创建一个Timestamp。


Timestamp记得从 Firebase导入:


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"

我希望它有帮助!


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信