Индексирование узлов Firebase на основе значения дочернего элемента с использованием правил Firebase - PullRequest
0 голосов
/ 06 февраля 2019

Индексировать узлы на основе значения дочернего элемента, используя правила Firebase

Можно ли использовать правила Firebase для индексации всех дочерних элементов голосов по значению там voice_count, чтобы я мог вернуть первые 10 узловголосов, и они будут иметь наибольшее количество голосов.Чтобы избежать трудоемких запросов.

Данные структурированы следующим образом.

   {
    "votes": {
        "LXlcgMyGG16N9HdR4HD":{
            "vote_count": 2,
            "uid1": true,
            "uid2": true
        }   
         "LXlix7BiJ3D9ZFd4sS5":{
            "vote_count": 3,
            "uid1": true,
            "uid2": true,
            "uid3": true
        }   
    }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Предполагая, что этот JSON:

{
  "votes": {
    "LXlcgMyGG16N9HdR4HD":{
        "vote_count":2,
        "uid": true,
        "uid2": true
    }   
     "LXlix7BiJ3D9ZFd4sS5":{
        "vote_count": 3,
        "uid": true,
        "uid2": true,
        "uid3": true
    }   
  }
}

Вы можете получить узлы с 10 наибольшим количеством голосов с помощью:

firebase.database().ref("votes").orderByChild("vote_count").limitToLast(10)

Однако следует отметить несколько вещей:

  1. Вы по-прежнему будете загружать UID всех проголосовавших.Если вы не отображаете эту информацию, ее загрузка является пустой тратой пропускной способности, которая будет ухудшаться по мере увеличения числа пользователей.В этом случае рассмотрите возможность добавления второго узла верхнего уровня только с vote_counts.
  2. Результаты будут в порядке возрастания.Если вы хотите показать топ-10, это означает, что вам, как правило, нужно поменять их местами на стороне клиента.Учитывая, что это всего 10 элементов, влияние на производительность должно быть незначительным.

Также см. Документацию Firebase по упорядочению и фильтрации результатов .

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