2016-04-17 42 views
2

我無法弄清楚如何使用Firebase解決此問題:我有用戶,每個用戶都有帖子,每個帖子都有一個由firebase生成的ID,如何將這些ID存儲在用戶節點?在Firebase中存儲ID列表

我使用字符串,連接它們,解析它們在我的js應用程序中。基本上將它們視爲一個csv文件。但我想這是一個非常醜陋的解決方案

什麼樣的方式來存儲這種數據?

編輯:

用戶名:

  • 用戶名= 「用戶名」
  • 帖子= 「ID1,ID2,ID3,ID4」

當用戶有一個新的後,我使用一個事務來追加一個新的ID在字符串的末尾。當我需要刪除的ID,我再次使用事務,我使用此代碼刪除元素:

removeElem(list, value) { 
var separator = ","; 
var values = list.split(separator); 
for (var i = 0; i < values.length; i++) { 
    if (values[i] == value) { 
     values.splice(i, 1); 
     return values.join(separator); 
    } 
} 
return list; 
}, 
+2

而不是描述你的數據結構和代碼,顯示它。提供一個最小的,完整的,可編輯的例子,它可以再現你所問的內容。然後說出你的擔憂是什麼,因爲「醜陋」是非常主觀的。你認爲醜陋的,我可能會認爲「它有效,所以它很漂亮」。 –

+0

我編輯了我的帖子並添加了一些信息。 –

+0

下面的答案。很多時候,這通常是[JavaScript開發人員的Firebase指南]相關片段的副本(https://www.firebase.com/docs/web/guide/)。我強烈建議今天閱讀該指南封面封面。現在花在這裏幾個小時,會節省更多的時間(以及許多問題)。 –

回答

3

雖然交易將進行這方面的工作,它嚴重傷害的可擴展性,並不會在所有的工作,當用戶暫時失去連接。爲了更好的解決方案,擺脫陣列邏輯並使用Firebase的push()方法。從Firebase documentation on saving lists of data

推送與交易

數據push()的名單中工作時確保一個獨特的和時間標識。您可能會試圖使用交易來生成自己的ID,但推送是一個更好的選擇。事務更慢,更復雜。他們需要一次或多次往返服務器。客戶端上的推送ID可以在離線時生成並針對性能進行優化。

雖然它可能需要一些習慣於非順序鍵,但從長遠來看它會更好。

+0

好吧,但在我的情況下,數據應該如何?說實話,我很難搞清楚這一點。 在用戶的帖子節點中,我只需要ids,應該看起來像這樣: 帖子{id1:「something,id2:」something「,...} –

+0

要明確,帖子在一個單獨的節點中,其中 –

+0

然而,您應該最好地使用它,但常見的結構是'{id1:true,id2:true}'。請參閱Firebase關於[使用索引定義複雜關係的文檔] (https://www.firebase.com/docs/web/guide/structuring-data.html#section-indices)。 –