Javascript 只给firebase打一次电话而不是打50次电话来获取POST数据?

Javascript 只给firebase打一次电话而不是打50次电话来获取POST数据?,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我需要从firebase中的2个json文件中获取数据,因此我执行以下操作: feedRef = firebase.database().ref().child('feed').child(id).limitToLast(50); feedRef.once('value', async function(snapshot) { snapshot.forEach((subChild) => { var value = subChild.val(); value =

我需要从firebase中的2个json文件中获取数据,因此我执行以下操作:

feedRef = firebase.database().ref().child('feed').child(id).limitToLast(50);
feedRef.once('value', async function(snapshot) {

    snapshot.forEach((subChild) => {
    var value = subChild.val();

    value = subChild.key;   // maybe get a array of values?             

    var post = firebase.database().ref('/posts/' + value).orderByKey(); // inside loop 50 times
我想知道是否有一种方法,我可以获得我需要的所有数据键,并从
posts
中只选择一次所有值,而不是像我这样将其放入循环运行50次

非常感谢


编辑:


根据我们在聊天室中的讨论:

理想情况下,您需要避免循环中的50-500多个数据库调用,因为我确信这将导致性能问题。为了避免FB RTDB中的这种“连接”,通常需要创建额外的节点和/或合成复合键,以便您可以通过一个调用读取所需内容,或通过一个侦听器监视所需内容

在您的项目中,我希望创建第三个节点,名为
postsFollowed
,该节点的键为
user\u uid
,并列出用户正在关注的所有帖子及其数据。帖子使用的键可以是FB生成的唯一键,在这种情况下,它们是按时间顺序排列的,也可以是您自己分配的键,即
提要
中使用的键,它本身可能是FB生成的键

然后,您可以在该节点中读取特定的
用户id
、子
postId
、orderbykey、限制到最后50个(或任意值),并在一次调用中获得所需的一切

这将意味着大量的数据重复(考虑到多人将关注同一帖子,您需要考虑重复的程度),因此您需要确保存储的密钥和数据尽可能紧凑。对存储进行计算

考虑到这种结构和跨节点复制的数据,为了确保数据完整性,您需要执行“原子写入”,在一个数据库操作中,在所有相关节点上设置或更新“post”,所有操作要么成功,要么失败


希望这对您有所帮助和帮助。

请同时发布您的数据库结构。@GrahamD我编辑了我的问题。您指的是一个孩子
用户发布的
,但我在那里看不到它?@GrahamD抱歉,它是
提要
,不再是用户发布了。我更改了json的名称,但忘了在这里进行更改。我只是想确认一下,我理解了您试图实现的目标:您想要检索特定用户id的最后50篇帖子吗?
posts
  |
  --- key (eg. 123)
       |
       --- img
       |
       --- text
       |
       --- user

feed
  |
  --- user_uid key
           |
           --- post id reference (eg. 123)
                  |
                  --- postID: 123