Firebase DBのクエリを簡略化する方法があるかどうか不思議でした。Swift:ネストされたFirebaseフェッチ/クエリの簡略化
また、プルリクエストを行うときに従うべきベストプラクティスは何ですか。
私のコード内では、私の階層構造が子供を追加するのがより複雑になり、結果は非常に激しく長いクエリになります。ここで
は自分のアプリケーション内のクエリの例である:あなた自身が複雑なクエリを必要と判明した場合
Firebase DBのクエリを簡略化する方法があるかどうか不思議でした。Swift:ネストされたFirebaseフェッチ/クエリの簡略化
また、プルリクエストを行うときに従うべきベストプラクティスは何ですか。
私のコード内では、私の階層構造が子供を追加するのがより複雑になり、結果は非常に激しく長いクエリになります。ここで
は自分のアプリケーション内のクエリの例である:あなた自身が複雑なクエリを必要と判明した場合
、それが最も可能性の高いデータが適切に構成されていないことを意味します。 あなたの場合、構造を正規化(平坦化)する必要があります。
次の変更は、あなたのクエリを簡単にする必要があります。
{
"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": "",
...
}
},
...
}
私はあなたが「プルリクエスト」によって意味を得ることはありません。あなたが単にデータを観察したり、単に読み込んだりすることを意味するのであれば、それはかなり簡単です。あなたのケースで必要なのは、そのデータ(AircraftHouseRules
、BasicInfo
、DetailedInformation
など)に直接アクセスするには、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というキーと値のペアに置き換えることも検討してください。
ありがとうございます。私は変更を行います。 – Cari95