Как получить данные из базы данных Firebase с двух разных подуровней? - PullRequest
0 голосов
/ 30 октября 2018

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

База данных

enter image description here

Индекс действий

enter image description here

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

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 30 октября 2018

Вам нужно будет сделать еще on() или once() для каждого события в вашем текущем обратном вызове и загрузить дополнительные данные. Этот процесс известен как соединение на стороне клиента. Затем во внутреннем цикле вы можете отправлять результаты либо при каждой загрузке, либо когда все загружены.

Код (не проверено, поэтому возможны опечатки):

usersRef.child(uid).child("events").on("value", snapshot => {
  var promises = []
  snapshot.forEach(eventSnapshot => {
    promises.push(eventsRef.child(eventSnapshot.key).once("value"));
  })
  Promise.all(promises).then(eventSnapshots => {
    // eventSnapshots contains the details of all events
    return eventSnapshot.map(eventSnapshot => eventSnapshot.val());
  }).then(events => {
    dispatch({ type: FETCH_EVENTS, payload: events });
  });
})

В качестве альтернативы вы можете дублировать минимальные данные для каждого события в / users / $ uid / events / $ eventid`. Это дублирует данные, но предотвращает необходимость соединений на стороне клиента. Этот тип компромисса чтения-записи-записи очень распространен при использовании баз данных NoSQL. Для стратегий для дублированных данных в актуальном состоянии см. Как записать денормализованные данные в Firebase .

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