2017-10-20 5 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": "", 
     ... 
    } 
    }, 
    ... 
} 

私はあなたが「プルリクエスト」によって意味を得ることはありません。あなたが単にデータを観察したり、単に読み込んだりすることを意味するのであれば、それはかなり簡単です。あなたのケースで必要なのは、そのデータ(AircraftHouseRulesBasicInfoDetailedInformationなど)に直接アクセスするには、listing id/keyです。

あなたは(のは、その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

関連する問題