2017-07-21 33 views
0

我無法通過指定特定的子鍵並僅在指定對象的整個路徑時找到firebase對象。爲什麼是這樣?通過鍵找不到firebase孩子

這工作

ref.child(`users/${user.uid}/watchlist/${key}`) 
    .once('value') 
    .then(function(snapshot) { 
    console.log(snapshot.val()); 
}); 

這不起作用

ref.child(key) 
    .once('value') 
    .then(function(snapshot) { 
    console.log(snapshot.val()); 
}); 

我的火力點連接

export const ref = firebase.database().ref() 

回答

1

我不知道你會想到怎麼回事它的工作? child() is not a "search" function,它只查看您指定的引用或子路徑的直接子節點。它沒有查看嵌套路徑Firebase結構「搜索」指定的鍵。這將是非常低效的。即使它確實這樣做,如果有多個匹配鍵會發生什麼?它會全部返回嗎?如果他們處於不同的深度呢?等等

Firebase實時數據庫基本上是一個很大的類JSON數據樹。獲得一點你想要的數據的唯一方法是知道數據的整個路徑。否則根本就沒有任何結構。

我想如果你願意,你可以加載整個Firebase數據結構,然後編寫自己的函數來查找任意鍵,而不管它們在樹中的什麼位置。但是,如果將其構建到Firebase庫本身中,那麼效率問題同樣存在問題 - 事實並非如此。

或許這會更好地說明child()的工作原理。這:

ref.child(`users/${user.uid}/watchlist/${key}`); 

是基本相同的:

ref.child("users").child(user.uid).child("watchlist").child(key); 

雖然我懷疑第二種方法是低效率的,我不知道肯定做。

+0

很好的回答傑瑞德。稍作澄清:Firebase查詢允許您使用單個動態部分搜索路徑。另請參閱我的答案在這裏:https://stackoverflow.com/questions/27207059/firebase-query-double-nested –

+0

如果uids是唯一的,那麼在數據庫中指定特定的子項將工作,但我不知道這是否會有效但效率不是我關心的重點。 –