2017-10-20 72 views
0

我很想知道是否有方法來簡化我的Firebase DB查詢。Swift:簡化嵌套Firebase提取/查詢

此外,在進行拉取請求時,還有哪些最佳做法需要遵循。

我注意到我的層次結構從添加子項得到的結果更復雜,導致代碼中出現極其艱難和長時間的查詢。

這裏是我的應用程序中的查詢的例子: enter image description here

enter image description here

回答

0

如果你發現自己需要複雜的查詢,這很可能意味着你的數據不正確的結構。 在你的情況下,你的結構需要被標準化(扁平化)。

以下修改應該讓你的查詢更加簡單:

{ 
    "listings": { 
    "listing_key_1": { 
     "timestamp": "2017 10 19 07:49:38" 
    }, 
    "listing_key_2": { 
     "timestamp": "2017 10 19 05:30:02" 
    }, 
    ... 
    }, 

    "AircraftHouseRules": { 
    "listing_key_1": { 
     "Availability": "", 
     ... 
    }, 
    "listing_key_2": { 
     "Availability": "", 
     ... 
    } 
    }, 

    "BasicInfo": { 
    "listing_key_1": { 
     "ModelPlane": "", 
     ... 
    }, 
    "listing_key_2": { 
     "ModelPlane": "", 
     ... 
    } 
    }, 
    ... 
} 

我不明白你所說的「拉請求」的意思。如果你的意思是觀察或者只是讀取數據,那就很簡單。所有你需要在你的情況下是一個listing id /密鑰來獲得其數據的直接訪問(AircraftHouseRules,BasicInfo, DetailedInformation等)。

如果你想反向(通過獲得上市的關鍵,讓我們說,它TypeOfPlane),你可以做下面的查詢

// NOTE: Untested code - just for illustrative purposes 
let queryRef = Database().database.reference.child("BasicInfo").queryOrdered(byChild: "TypeOfPlane").queryEqual(to: "some type") 

queryRef.observeSingleEvent(of: .value, with { snapshot in 
    if let listings = snapshot.value as? [String : Any] { 
     // all retrieved listings with TypeOfPlane == "some type" 
    } 
}) 

提示

你應該總是avoid nesting structures避免下載不必要的數據並影響性能。在您發佈的屏幕截圖中,您最多有8層嵌套數據。通過上面的修改,您可以輕鬆將這些級別減半。

您還應該考慮使用鍵值對替換所有的陣列結構(如ImageRef下的那些),如arrays can be evil

+0

謝謝你的建議。我會做出改變。 – Cari95