2016-07-12 81 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」或(輔助)訪問用戶。 –

相關問題