Сортировка запросов в Firebase Swift - PullRequest
0 голосов
/ 30 мая 2019

Моя база данных в реальном времени имеет следующую структуру:

   - Procedure001
        - Post0001
            - user_id: 00001
            - timestamp: 1559214445

Я хотел бы прочитать базу данных и получить только сообщения, опубликованные пользователем user0001, а также отсортировать их по самым последним сообщениям (по отметке времени).

В настоящее время я могу получать сообщения только определенного пользователя, например:

let ref = Database.database().reference().child("Procedure001").queryOrdered(byChild: "user_id").queryEqual(toValue: "0001")

Как я также могу отсортировать по отметке времени с помощью firebase?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Я понимаю, что вы опубликовали ответ, и хотя он будет работать, существуют некоторые ограничения.

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

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

Procedure
   post_0
      uid: uid_0
      timestamp: 20190529
   post 1
      uid: uid_0
      timestamps: 20190530

. Как вы упомянули, вы можете запрашивать все сообщения из uid_0 и сортировать по отметке времени в коде.Но, проверьте это ...

user_posts
   uid_0
      post_0: 20190529
      post_1: 20190530

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

Я выброшу еще одну опцию, составные значения.

Procedure
   post_0:
      uid_timestamp: uid_0_20190529
   post_1:
      uid_timestamp: uid_0_20190530

Используя эту структуру, вы можете запрашивать все сообщения uid_0, упорядоченные по uid_timestamp.

0 голосов
/ 30 мая 2019

В итоге я получил сообщения и отфильтровал их, поэтому я получал сообщения только от определенного пользователя, использующего Firebase, и впоследствии сортировал их по отметке времени, используя новую функцию Swift 5 sort () - я использовал ответ swift 5 в этой теме Swift, как сортировать массив пользовательских объектов по значению свойства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...