2016-12-03 5 views
1

У меня есть некоторый вложенный код, который я пытаюсь получить в Firebase. Я понимаю, как получить доступ в second_user, но вначале я не уверен, как это сделать.Получить пользователей от nested property в Firebase

У меня есть код, который работает для второго ниже, но не первый. Как мне сделать то же самое?

ref.child('users') 
    .orderByChild('username') 
    .equalTo(username) 
    .once('value', function (snapshot){ 
    console.log(snapshot.val()) 
    }) 

для этих данных ниже

users { 
    "first_user" : { 
     "info" : { 
     "admin" : false, 
     "email" : "adaaasds", 
     "first" : "Sam", 
     "last" : "Cassell", 
     "username" : "samcassell" 
     } 
    }, 
    "second_user" : { 
     "admin" : false, 
     "email" : "[email protected]", 
     "first" : "john", 
     "last" : "doe", 
     "username" : "johndoe" 
    } 
    } 

ответ

2

Для запроса данных, структурированных как first_user в вашем примере, вы бы указать глубокий путь к ребенку:

ref.child('users') 
    .orderByChild('info/username') 
    .equalTo(username) 
    .once('value', function (snapshot) { 
    snapshot.forEach(function (childSnapshot) { 
     console.log(childSnapshot.key, JSON.stringify(childSnapshot.val())); 
    }); 
    }) 

Для запросов, где вы ожидайте, что только один ребенок будет соответствовать, вы можете позвонить по телефону limitToFirst и использовать forEach следующим образом:

ref.child('users') 
    .orderByChild('info/username') 
    .equalTo(username) 
    .limitToFirst(1) 
    .once('value', function (snapshot) { 
    var user; 
    snapshot.forEach(function (childSnapshot) { user = childSnapshot.val(); }); 
    if (user) { 
     console.log(JSON.stringify(child.val())); 
    } else { 
     console.log('User not found.'); 
    } 
    }) 
+0

с этим, есть ли способ получить объект, возвращенный из snapshot.val()? , например он возвращает 'Object {firstUser: Object}'. единственный способ, которым я могу думать, - «Object.keys» (snapshot.val()) [0] ', но это кажется беспорядочным –

+0

Я обновил ответ. Понятно, что мой предыдущий комментарий был бонкерами. Я должен подождать, пока у меня не будет утреннего кофе, прежде чем что-нибудь ответить. – cartant

+0

Я фактически просто переключился на использование однажды ('child_added'). не думал, что это была большая сделка! –

Смежные вопросы