2016-01-05 23 views
2

我試圖訪問僅包含10個URL的Firebase快照中的第一個數據的屬性。不管我嘗試什麼,但是,我得到了整個快照。我的代碼如下所示:訪問Firebase快照中的第一個數據

myDataRef.limitToLast(10).on("child_added", function(snapshot) { 
var newImg = snapshot.child("url"); 
    console.log(newImg); 
}); 

有沒有一種方法來指定[0]或整個快照,這樣我就得到了第一個數據之類的?

回答

2

這是棘手,沒有看到你的數據結構可以肯定的,但我認爲你正在尋找:在所有子

myDataRef.limitToLast(10).on("child_added", function(snapshot) { 
    var newImg; 
    snapshot.forEach(function(urlSnapshot) { 
    if (!newImg) { 
     newImg = urlSnapshot.val(); 
    } 
    }); 
    console.log(newImg); 
}); 

forEach()循環snapshot的鍵,並調用其中每一個的DataSnapshot的內部回調。

newImg = urlSnapshot.val();只會得到那個孩子的價值。您可能必須根據您的數據結構修改此位。

0

您需要先將快照存儲爲數組,然後將其作爲[0]進行訪問。

我不是在我的Mac電腦(我回答你的問題,因爲iOS,但我相信這個概念是相同的),所以這只是從我的記憶,但它的作品,如果語法是正確的:

var newImgArray = snapshot.children.objects as? [FSSnapshot] VAR newImg = newImgArray [0] .value的

+0

害怕我得到「未定義」。我嘗試'var newImgArry = snapshot.val();' 'console.log(newImgArry [0] .value);' – eabates

+0

我認爲.childAdded實際上被稱爲10次,如果您查詢10個項目而不是全部返回一個數組中有10個項目。 如果是這種情況,只需在Firebase調用之外創建一個數組,然後將每個快照添加到您的數組中。好像你不在iOS上工作,所以我無法提供語法幫助,但想法是在外部創建一個數組,然後使用myArray.append(快照)。然後在Firebase調用之後,您可以訪問myArray [0] –

1

讓我優先考慮這一點,表示數據如何存儲在firebase中沒有保證的順序 - 第一項或索引第0項的概念取決於數據如何存儲以及如何檢索數據。

所以最好的辦法是將所有值加載爲快照並按指定值(如日期或高度等)進行排序,並從排序後的數組中取出第0個索引,或者加載數據子集使用queryOrderedByChild或queryStartingAtValue

這可能是一個問題的答案:它指定節點內僅檢索第一值:

users 
    user_0 
    firstName: "Fred" 
    user_1 
    firstName: "Bill" 
    user_2 
    firstName: "Ted" 

和代碼

usersRef.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 
    if snapshot.value is NSNull { 
     print("snapshot was NULL") 
    } else { 
    print(snapshot) 
    } 
}) 

和結果

Snap (user_0) { 
    firstName = Fred; 
}