Firestore получает случайные документы за последние 48 часов - PullRequest
2 голосов
/ 13 июля 2020

В моей ситуации мне нужно читать случайные сообщения за последние 48 часов. Я видел метод, в котором нам нужно создать случайный идентификатор и запрос с диапазоном isGreaterThanOrEqualTo, чтобы получить случайные сообщения. Но мне также нужно использовать его для отметки времени. Насколько мне известно, Firestore не позволяет выполнять запросы диапазона по разным полям в одном запросе. Как я могу получить случайные сообщения за последние 48 часов?

  --- posts (collection)                                                     
   |     |
   |     --- postid (documents)
   |          |
   |          --- country_code: "TR"
   |          |
   |          --- timestamp: "Server.Timestamp"
   |          |
   |          --- post_text: "Some Text" 

1 Ответ

1 голос
/ 13 июля 2020

Я вижу два решения:

  1. Предполагая, что сообщения равномерно распределены в течение 48 часов, используйте временную метку в качестве случайного индекса, как указано в ответе, вы связываете

  2. Закодируйте метку времени так, чтобы вам не нужно было использовать диапазон для фильтрации за последние 48 часов. Например, вы можете добавить поле timechunk, которое разделяет время на фрагменты по 5 часов и увеличивается на 1 на каждом фрагменте, а затем просто добавляет к вашему запросу последние 10 фрагментов

    let postsRef = db.collection("posts")
    queryRef = postsRef.whereField("random", isGreaterThanOrEqualTo: lowValue)
                    .whereField("timechunk", in: ["chunk1", "chunk2", "chunk3", "chunk4", "chunk5", "chunk6", "chunk7", "chunk8", "chunk9", "chunk10"])
                    .order(by: "random")
                    .limit(to: 1)
    

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

...