Получите документы, отметка времени которых превышает 24 часа - PullRequest
0 голосов
/ 12 июля 2020

Итак, я пытаюсь получить только документы, которым 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, что происходит?

введите описание изображения здесь

1 Ответ

3 голосов
/ 12 июля 2020

Эта строка вычисляет длинное целое число, которое представляет собой количество миллисекунд с эпохи unix, 24 часа в будущем:

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

Однако поле временной метки в вашей базе данных является Firestore поле типа отметки времени. Firestore не сравнивает целые числа с отметками времени. Вы можете сравнивать только отметки времени с отметками времени. Вы можете передать объект Date или Timestamp из SDK для этого сравнения. Попробуйте преобразовать число в дату:

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

Также имейте в виду, что ваша дата представляет момент времени в один день в будущем , но в описании проблемы говорится, что вы хотите установить метки времени в один день в прошлом . В этом случае вы, вероятно, захотите вычесть один день вместо добавления одного дня.

...