在Firebase响应中获取Firebase子节点的名称,而不获取它们的子节点?

14

我在Firebase上有以下层次结构,为保密起见一些数据被隐藏:

enter image description here

我想要获取视频ID列表(在红色下划线下)

我只能获取所有节点,然后检测它们的名称并将它们存储在一个数组中!但这会降低性能;因为在我的情况下,从Firebase获取的 dataSnapshot 很大,所以我想避免检索所有节点的内容,然后循环遍历它们以获取 ID,我只需要检索ID,即不包含其嵌套元素。

这是我的代码:

new Firebase("https://PRIVATE_NAME.firebaseio.com/videos/").once(
    'value', 
    function(dataSnapshot){ 

        // dataSnapshot now contains all the videos ids, lines & links
        // this causes many performance issues

        // Then I need to loop over all elements to extract ids !
        var videoIdIndex = 0;
        var videoIds = new Array();

        dataSnapshot.forEach(
            function(childSnapshot) {
                videoIds[videoIdIndex++] = childSnapshot.name();
            }
        );

    }
);

我该如何检索仅ID以避免大量数据传输和循环访问已检索的数据以获取ID?是否有一种直接检索这些ID的方法?

2个回答

10

更新:现在在REST API中有一个shallow命令,可以仅获取路径下的键。但此功能尚未添加到SDK中。

在Firebase中,你无法获取节点名称列表而不检索其中的数据,至少目前还不能。性能问题可以通过规范化来解决。

基本上,你的目标是将数据分成可消耗的块。将视频键列表及其可能的一些元字段(如标题等)存储在一个路径中,将大量内容存储在其他地方。例如:

/video_meta/id/link, title, ...
/video_lines/id/...

想要了解更多关于去规范化的内容,请查看这篇文章:https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html


1
嗨@Kato,有没有计划将shallow添加到SDK中? - gotbahn
你是否使用无法进行HTTP请求的工具?如果不可行,你可以将ID列表存储在一个用于SDK参考的单独路径中。请参阅多路径更新。 - Kato

5

这非常有用,它在2013年6月还没有出现。非常感谢分享这个更新! - Ashraf Bashir
我不这么认为,他们仅在今年十月份才为REST引入了shallow。 - webduvet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接