2016-12-07 35 views
1

我需要關於Firebase查詢的幫助。目前我正在使用AngularFire2。查詢Firebase的最高ID,然後添加到它

我一直在爲此掙扎好幾天。閱讀每一份文件,每一個觀看YouTube影片,並問了很多人,但我還是一無所獲..

我的火力地堡結構是這樣的:

ROOT 
    jobs 
     KYLigf4dFBvTTstR1Wy 
      id: "1" 
      customer: "Jeff F" 
      description: "Repair a chair" 
     KYLigACCViJVQffEoRl 
      id: "2" 
      customer: "Quick G" 
      description: "Install a light bulb" 
     KYLigSQasdCR3XfQ8WN 
      id: "3" 
      customer: "Justin S" 
      description: "Do everything for everyone" 
     KYLiddsfdsgWCKhjoiB 
      id: "4" 
      customer: "Heather D" 
      description: "Have a baby" 

所以我需要獲取最高的ID。然後,我需要使用下一個ID將新條目添加到列表中。在這種情況下,它將是5。就是這樣,這就是我需要的。我正在試圖做我的頭髮。

我試過一百萬種不同的方式,但是當我嘗試使用push()時,問題出現了,一切都崩潰了,所以我找不到正確的路徑。

我猜想另一種說法是,我想從Firebase中提取最高的ID,然後將其保存到隨其更改的變量中。然後,只要我需要獲取最新的ID,我就可以訪問該變量 - 因爲該數字將始終在變化。

+0

這通常需要一個事務,這意味着:1)它成爲可伸縮性的瓶頸,2)它不會工作,當用戶離線。如果您對這兩者都行,請參閱http://stackoverflow.com/questions/16127389/real-time-click-link-counter。除此之外:如果您嘗試過某些不起作用的功能,請分享[重現問題的最小代碼](http://stackoverflow.com/help/mcve)。 –

回答

2

一種可能的解決方案是創建跟蹤下一個ID的第二個節點。

當您插入一個新的作業時,請跟隨該插入,並更新下一個JobID節點以增加該ID。這將簡化檢索下一個ID的需要。

請記住,使用Firebase的數據結構是非規範化的。它可以創建更多的節點,使讀取更快。

ROOT 
jobs 
    KYLigf4dFBvTTstR1Wy 
     id: "1" 
     customer: "Jeff F" 
     description: "Repair a chair" 
    KYLigACCViJVQffEoRl 
     id: "2" 
     customer: "Quick G" 
     description: "Install a light bulb" 
    KYLigSQasdCR3XfQ8WN 
     id: "3" 
     customer: "Justin S" 
     description: "Do everything for everyone" 
    KYLiddsfdsgWCKhjoiB 
     id: "4" 
     customer: "Heather D" 
     description: "Have a baby" 
nextJobId: 5 // Create an index that provides the next Id. 
+0

起初我以爲這聽起來很荒謬,但我越想越覺得這是FireBase的工作原理。我太習慣於SQL了。這工作完美!謝謝! :D – Jus10

+1

來自SQL背景,我也在努力調整非規範化數據。這是Firebase的合法用例。祝你好運! – Gregg

1

使用火力地堡的怪異「KYLigf4dFBvTTst ......」鍵作爲您的ID

我們都更加舒適與傳統的id像1,2,3,因此使出渾身解數試圖找到生成的方法他們。但是,創建常規ID的需求已經爲您創建了一個複雜的問題。

Firebase的奇怪外觀自動生成的密鑰實際上旨在解決您的問題。它們具有遞增ID的特徵,即它們告訴你創建的日期順序,並且還有效地提供唯一性,如UUID。

重要的是,它們允許多個客戶端誰離線仍然生成非常可能的時間順序和唯一的ID。可以生成

火力地堡鍵離線

他們不只是奇怪的看着,他們也奇蹟般地能夠產生沒有互聯網連接

生成它們的方法,

.push 

是一個純客戶端的操作,而你沒有連接到網絡,可以在瀏覽器中運行(例如)。它確實不是發送任何東西到數據庫。

與此相關的是,可以隨意生成並丟棄Firebase密鑰而不會受到任何懲罰,並且您可以根據自己的喜好生成儘可能多的密鑰:只有當您實際向密鑰寫入內容時,數據庫。

放開1,2,3

它們來自預連接時代。 我想教教我的寶貝女兒來計算Firebase Id的數量...

+0

感謝您的意見。我一直在嘗試最近越來越多地使用它。你說得對,這很容易。我仍然喜歡使用id來獲得更多用戶友好的索引,但仍然...試圖讓它走下去 – Jus10

相關問題