2016-08-22 148 views
3

我在火力火力地堡的Web檢索數據

enter image description here

以下數據庫結構我試圖抓住屬於一個特定的用戶ID(UID)數據。該文檔有以下示例:

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

但是,如何從我的示例中檢索數據而無需知道每個對象的唯一鍵?

更新:

我嘗試一種新的方法通過將用戶ID作爲主鍵,每個子對象都有它自己獨特的ID。

enter image description here

現在面臨的挑戰是如何讓「稱號」的價值。

回答

7
firebase.database().ref('/tasks/').orderByChild('uid').equalTo(userUID) 

那麼這是非常簡單的。那麼你可以這樣使用它:

return firebase.database().ref('/tasks/').orderByChild('uid').equalTo(userUID).once('value').then(function(snapshot) { 
    var username = snapshot.val().username; 
    // ... 
}); 

當然你需要設置userUID。

這是帶有一些過濾的查詢。更多關於Retrieve Data - Firebase doc

編輯:新的挑戰的解決方案是:

var ref = firebase.database().ref('/tasks/' + userUID); 
//I am doing a child based listener, but you can use .once('value')... 
ref.on('child_added', function(data) { 
    //data.key will be like -KPmraap79lz41FpWqLI 
    addNewTaskView(data.key, data.val().title); 
}); 

ref.on('child_changed', function(data) { 
    updateTaskView(data.key, data.val().title); 
}); 

ref.on('child_removed', function(data) { 
    removeTaskView(data.key, data.val().title); 
}); 

請注意,這只是一個例子。

+0

謝謝!你認爲最好的做法是將用戶ID作爲每個對象的主鍵嗎?然後嘗試檢索每個子對象。 – CyberJunkie

+0

我已經對顯示新結構的問題進行了更新。 – CyberJunkie

+1

這取決於使用場景。如果您構建待辦事項列表,則最好使用用戶標識作爲主鍵。我將在一段時間內編輯答案以匹配您的問題編輯。 – pr0gramist