2016-07-12 33 views
2

好吧,我正在使用firebase我尝试了一些代码从文档,告诉我如何从我的数据库检索数据。我使用Web文档好吧 这里是我的数据库看起来像我想从firebase对象获取数据如何?

MyApp-446464 
users 
    foo 
    -foobar 
     first_name:"foo" 
     last_name:"bar" 

    bar 
    -barfoo 
     first_name:"bar" 
     last_name:"foo" 
从上面

所以,我得到使用

firebase.database().ref('users/').once('value').then(function(snapshot) { 
    var username = snapshot.val(); 
}); 

对象但问题是,我似乎无法得到值,如果我用

username.first_name; 

它给我不确定有人可以帮助我什么我做错

+0

为什么你有两个级别的孩子下的用户信息? '/ users/id1/id2' – adolfosrs

+0

第一个是uid,另一个是从推@adolfosrs – Redcode

回答

1

这不可能有/users/uid/id2

确保使用ref.child('users').child(uid).set(userDataObject)保存您的用户数据。

然后您将能够使用orderByChildequalTo检索数据。您可以使用this question作为参考来实现它。

var ref = firebase.database().ref(); 
ref.child('users').orderByChild('first_name').equalTo(username.first_name).once('value' ... 
+0

创建的请问你会不会设置重写数据? @adolfosrs – Redcode

+0

@Redcode是的。但是使用这种方法你可以只设置一个特定的字段。 ('用户')。child(uid).child('first_name').set('Redcode')' – adolfosrs

+0

是啊,所以tru结束感谢我的应用程序现在正在拍摄@adolfosrs – Redcode

5

您的代码要求输入整个用户列表。所以它必须在回调中处理该列表:

firebase.database().ref('users/').once('value').then(function(snapshot) { 
    snapshot.forEach(function(userSnapshot) { 
     var username = userSnapshot.val(); 
     console.log(username.first_name); 
    }); 
}); 
+0

嘿,弗兰克,我敢肯定这有效,但我们不应该鼓励用户不设计这种结构?我的意思是,这个额外的ID是完全不必要的,增加了复杂性感谢致敬。 – adolfosrs

+0

这应该是标记为正确的答案,你看到我完全完成了什么,但我确实使用@adolfosrs来塑造数据库的不同,而不是使用push和uid,我把uid设置为一个孩子,但是要感谢你们两个Frank和adolfosrs好吧 – Redcode

+1

@adolfosrs:如果你需要所有的用户,我的代码段是一个有效的方法。您可能想要使用'child_'事件,但唯一的区别是它们可以更容易地更新UI(这通常是使用它们的一个很好的理由)。如果您只需要一个用户,那么您确实不应检索列表,但最好通过查询直接通过他们的“uid”或(辅助)访问用户。 –

相关问题