Как выполнить несколько запросов orderByChild в базе данных Firebase - PullRequest
0 голосов
/ 06 февраля 2019

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

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

posts: {
   "-LY0tr3NmAlZhJDfxMch": {
   "State": "California",
   "City": "SanFrancisco",
   "StateCity": "California_SanFrancisco",
   "createdAt": 1549441397199,
   "postText": "Hello!!",
   "starCount": 0,
   "userId": "blAWQ9g9YMciB312fasdawqeqw",
   },
....
}

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

 firebase
        .database()
        .ref()
        .child("posts")
        .orderByChild("State") // or City or StateCity
        .equalTo('...')
        ...

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

 firebase
        .database()
        .ref()
        .child("posts")
        .orderByChild("State") // or City or StateCity
        .equalTo('e.g. California') // query posts that have state California
        .orderByChild("StarCount") // from posts of California, order them by starCount
        .once("value")
        ...

Я не могу снова использовать orderByChild, поэтому я застрял в том, как я мог бы реструктурировать свою базу данных для достижения вышеуказанного результата.

Как я могу это сделать?Спасибо!

1 Ответ

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

Как вы сказали в своем вопросе, вы не можете этого сделать, Firebase не позволяет этого.Вам нужно получить результаты первого запроса и упорядочить их по коду ПОСЛЕ разового («значения») вызова.

var stateResult = firebase.database()
        .ref()
        .child("posts")
        .orderByChild("State") // 
        .equalTo('...');

//Do something here with the returned stateResult to order them by StarCount

Для этого вам не нужно реструктурировать базу данных, просто сделайте этов коде

...