获取时间戳大于 24 小时的文档

SNM*_*SNM 0 android kotlin firebase google-cloud-firestore

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

data class Order(@ServerTimestamp val timestamp:Date? = null)
Run Code Online (Sandbox Code Playgroud)

现在,当我查询时,我想带回时间戳大于 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)
    }
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

Dou*_*son 5

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

val oneDay = Date().time + (24 * 60 * 60 * 1000)
Run Code Online (Sandbox Code Playgroud)

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

whereGreaterThan("timestamp", new Date(oneDay))
Run Code Online (Sandbox Code Playgroud)

还要记住,您的 Date 表示未来某一天的某个时刻,但您的问题描述说您想要时间戳最多过去一天。在这种情况下,您可能希望减去一天而不是添加一天。