Получить имена дочерних узлов Firebase, не получая их детей в ответ Firebase?

У меня есть следующая иерархия на firebase, некоторые данные скрыты для конфиденциальности:

enter image description here

Я пытаюсь получить список идентификаторов видео (подчеркивает красным)

Я могу получить только все узлы, затем определить их имена и сохранить их в массиве!
Но это приводит к низкой производительности; потому что dataSnapshot от firebase очень большой в моем случае, поэтому я хочу, чтобы избежать получения содержимого всех узлов, а затем перебирать их для получения идентификаторов, мне нужно просто получить только идентификаторы, т.е. без их вложенных элементов.

Здесь мой код:

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();
            }
        );

    }
);

Как я могу получить только идентификаторы, чтобы избежать многотысячной передачи данных и избегать циклирования полученных данных для получения идентификаторов? есть ли способ просто получить эти идентификаторы напрямую?

Ответ 1

UPDATE: в REST API теперь есть команда shallow, которая будет извлекать только ключи для пути. Это еще не добавлено в SDK.

В Firebase вы не можете получить список имен node, не получая данные под ним. Пока нет. Проблемы с производительностью могут быть устранены с нормализацией.

По существу, ваша цель состоит в том, чтобы разделить данные на расходуемые куски. Сохраните список видео-ключей, возможно, с помощью нескольких мета-полей, таких как название и т.д., Одним путём и сохраните массовое содержимое в другом месте. Например:

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

Чтобы узнать больше о денормализации, ознакомьтесь с этой статьей: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

Ответ 2

Это немного устарело, и вы, вероятно, уже знаете, но на случай, если кто-то еще появится. Вы можете сделать это с помощью вызова REST api, вам нужно только установить параметр shallow=true

здесь документация