如何从两个不同的子级别从Firebase数据库中获取数据?

时间:2018-10-30 13:49:55

标签: reactjs firebase firebase-realtime-database request

我正在尝试请求获取用户的所有事件,然后在列表中获取此事件的详细信息。我找不到合适的解决方案。

Database

enter image description here

Actions index

enter image description here

因此,目前,我仅获得用户的旅行信息,而没有获得用户所进行的每个事件的详细信息。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

您将需要为当前回调中的每个事件执行另外一个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数据库时,这种读与写的权衡是很常见的。有关最新数据复制的策略,请参见How to write denormalized data in Firebase