2017-01-26 4 views
0

Это может быть очень простой вопрос, но я не могу это сделать. Потому что я новичок в firebase и javascript, хотя искал много. Это структура базы данных firebase.Как получить все узлы по заданному пути в firebase

{ "messages" : { 
"AGA Clinical Trials" : { 
    "test" : { 
    "-KbQDSG-3AXKjk1erhWO" : { 
     "senderName" : "[email protected]", 
    } 
    }, 
    "test-1" : { 
    "-KbQECK7edEok0treaLCI" : { 
     "senderName" : "[email protected]", 
    } 
    } 
} 

}

То, что я хочу все узлы список клинических испытаний AGA, которая является тест, тест-1. Я использую этот запрос для firebase.

var siteListref = firebase.database().ref('messages').child('AGA Clinical Trials') 

    siteListref.orderByKey().on('value', function(snapshot){ 

     var userName = snapshot.val(); 
     console.log('user name', userName); 
    } 
+1

Вы включили изображение дерева JSON в вашем вопросе. Пожалуйста, замените это на фактический JSON как текст, который вы можете легко получить, щелкнув ссылку Экспорт JSON в [вашей консоли базы данных Firebase] (https://console.firebase.google.com/project/_/database/data/) , Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. –

ответ

0

Когда вы слушаете событие значения в местоположении, вы получаете моментальный снимок со значением в этом месте. Таким образом, в вашем случае этот снимок будет содержать все дочерние узлы под AGA Clinical Trials.

Вы, вероятно, ищете отдельные дочерние узлы, что означает, что вы должны перебираю в результате снимок:

var siteListref = firebase.database().ref('messages').child('AGA Clinical Trials') 

siteListref.on('value', function(snapshot){ 
    snapshot.forEach(function(trialSnapshot) { 
     var userName = trialSnapshot.val(); 
     console.log('user name', userName); 
    }); 
} 

Точный код в forEach() итераторе зависит от структуры данных в рамках каждых дочерних узлов, которые вы не включили.

Более идиоматический способ иметь дело с дочерними узлами в Firebase - это подписка на дочерние события. Например, при прослушивании child_added, вы можете избавиться от петли forEach():

siteListref.on('child_added', function(snapshot){ 
    var userName = snapshot.val(); 
    console.log('user name', userName); 
} 
+0

Я могу получить значение, проблема в том, что я просто хочу имя узла (test, test1). Мой вариант использования - показать список пользователей AGA Clinical Trials. Может быть, я не получаю правильную причину моего новичка в javascript. –

+0

Если вы хотите имя узла, используйте 'console.log (snapshot.key)'. –