Javascript 只给firebase打一次电话而不是打50次电话来获取POST数据?
我需要从firebase中的2个json文件中获取数据,因此我执行以下操作: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 =
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