Получить имена дочерних узлов 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
здесь документация