14

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

在此处输入图像描述

我正在尝试获取视频 ID 列表(红色下划线)

我只能获取所有节点,然后检测它们的名称并将它们存储在一个数组中!
但这会导致性能低下;因为dataSnapshot在我的情况下 from firebase 非常大,所以我想避免检索所有节点的内容然后遍历它们以获取 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?

4

2 回答 2

10

更新:现在shallowREST API 中有一个命令将只获取路径的键。这尚未添加到 SDK 中。

在 Firebase 中,如果不检索下面的数据,就无法获取节点名称列表。反正还没有。性能问题可以通过标准化来解决。

本质上,您的目标是将数据拆分为可消耗的块。将您的视频键列表存储在一个路径中,可能带有几个元字段(如标题等),并将批量内容存储在其他位置。例如:

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

要了解有关反规范化的更多信息,请查看这篇文章:https ://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

于 2013-06-20T14:20:50.603 回答
5

它有点旧,您可能已经知道,但以防其他人出现。您可以使用 REST api 调用来执行此操作,您只需要设置参数shallow=true

这是文档

于 2014-12-02T10:14:39.563 回答