【问题标题】:FireStore date query not working as expectedFireStore 日期查询未按预期工作
【发布时间】:2019-02-04 07:24:31
【问题描述】:

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

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      请注意,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"
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 2021-02-06
        • 2012-11-13
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多