2017-04-01 51 views
2

我想要檢查Firebase數據庫中當前數據的最佳和推薦做法,因爲我決定讓一些更復制的數據支持一些複雜的查詢或只是使讀取數據更容易。對於例如,我有一個用戶列表在我火力地堡的數據庫和每個用戶的樣子在添加更多非規範化後更新當前數據Firebase數據庫的最佳實踐

users 
-KGvMIPwul2dUYABCDEF 
    countryCode: 1 
    id: -KGvMIPwul2dUYABCDEF 
    mobileNumber: 1231231234 
    name: Varun Gupta 

我一直在查詢基於他的手機號碼的用戶與當前數據的工作。現在,我還需要根據國家代碼和手機號碼的組合來查詢用戶。所以,我決定,以使查詢方便,並添加了一些重複數據的新用戶看起來像

users 
-KGvMIPwul2dUYABCDEF 
    countryCode: 1 
    id: -KGvMIPwul2dUYABCDEF 
    mobileNumber: 1231231234 
    name: Varun Gupta 
    mobileNumberWithCC: 11231231234 

我將有mobileNumberWithCC爲所有新用戶,但我也想更新當前用戶此信息。我想要求在這種情況下更新數據庫的最佳實踐。我是否應該使用admin SDK編寫一些代碼來更新所需的數據並運行一次,或者有其他建議的方式來執行此操作。

謝謝!

+1

這是面臨着許多開發商的問題 - 隨着應用程序的增長和新功能的添加,必須存儲額外的數據。由於這是一個子節點的直接添加,因此您的結論可能是最簡單的:遍歷所有用戶,讀入用戶數據,連接字段並寫出附加字段。不知道爲什麼有人會投票結束這個問題,因爲它是基於意見的,但直接關係到問題中非常清楚地闡述的特定編碼問題。 – Jay

+0

你解決了這個問題嗎? –

+0

@ AlexM.I帶着傑伊所提出的一些建議,當我發佈這個問題時,我想到了這一點。我只是想確保我沒有忽視某些東西。 –

回答

2

創建這樣的方法中,你可以一次更新的數據:

private static void updateUser(String userId) { 
    Map<String, Object> map = new HashMap<>(); 
    map.put("https://stackoverflow.com/users/" + userId + "/", new HashMap<>().put("mobileNumber", 1231231234)); 
    map.put("https://stackoverflow.com/users/" + userId + "/", new HashMap<>().put(mobileNumberWithCC, 11231231234)); 
    yourReference.updateChildren(map); 
} 

或者更簡單:

yourReference.child(users).child(userId).child(mobileNumber).setValue(1231231234); yourReference.child(users).child(userId).child(mobileNumberWithCC).setValue(11231231234);