【问题标题】:Get documents which timestamp is greater than 24 hs获取时间戳大于 24 小时的文档
【发布时间】:2020-11-01 10:13:32
【问题描述】:

所以,我试图只获取 24 小时前的文档,我在我的数据库中保存了一个时间戳值作为时间戳

data class Order(@ServerTimestamp val timestamp:Date? = null)

现在,当我查询时,我想带回时间戳大于 24 小时但查询不成功的文档,我已在控制台检查并创建了所有查询

suspend fun getIncompletedOrders(): Resource<List<Order>> {
        val reminderList = mutableListOf<Order>()
        val oneDay = Date().time + (24 * 60 * 60 * 1000)
        val query = FirebaseFirestore.getInstance()
            .collection("orders")
            .whereEqualTo("uid",FirebaseAuth.getInstance().currentUser?.uid)
            .whereIn("status", listOf(1,2,4,5,6))
            .whereGreaterThan("timestamp",oneDay)
            .get().await()
        for(document in query.documents){
            reminderList.add(document.toObject(Order::class.java)!!)
        }
        return Resource.Success(reminderList)
    }

正如您在此处看到的,我得到了当前时间,加上 24 小时并检查存储在 Firebase 中的时间戳是否大于该时间,但是当我将时间戳更改为前一天时,我没有收到任何文档Firestore,发生了什么?

【问题讨论】:

  • 请显示您希望匹配的文件的屏幕截图。请注意,您没有将日期传递给 whereGreaterThan,因此您永远不会匹配实际的时间戳字段值。一个数字只会与其他数字进行比较。另请注意,您要求的是时间戳大于未来一天的文档。
  • 我现在将添加照片@DougStevenson,感谢您的时间
  • 这就是文档,所以,如果我将 7 月 11 日到 7 月 10 日的代码移到它应该返回该文档但它不获取它,我做错了什么?
  • 请阅读我的全部评论。您正在传递一个数字,但该字段是一个时间戳。他们没有比较。
  • 你能详细说明这个问题的答案吗?谢谢,在问之前我一直在搜索

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

这一行正在计算一个长整数,它是自 unix 纪元以来的毫秒数,未来 24 小时:

val oneDay = Date().time + (24 * 60 * 60 * 1000)

但是,数据库中的时间戳字段是 Firestore 时间戳类型字段。 Firestore 不会将整数与时间戳进行比较。您只能将时间戳与时间戳进行比较。您可以从 SDK 传递 Date 或 Timestamp 对象以进行比较。尝试将数字转换为日期:

whereGreaterThan("timestamp", new Date(oneDay))

另外请记住,您的 Date 代表未来的某一天,但您的问题描述说您希望时间戳最多为 过去的某一天 .在这种情况下,您可能想减去一天而不是增加一天。

【讨论】:

  • 感谢 Doug 抽出宝贵时间!
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多