私は配信アプリを開発しています。だから私はfirebaseにこのようPRODUCTOSと人気の製品を持っている:他の子から子を照会する方法。 Firebase(SWIFT)
- 製品
- PopularProducts(キーと値の真として、製品のIDを)
これらの子を使用して人気がある製品のみをどのように照会できますか?
私は配信アプリを開発しています。だから私はfirebaseにこのようPRODUCTOSと人気の製品を持っている:他の子から子を照会する方法。 Firebase(SWIFT)
これらの子を使用して人気がある製品のみをどのように照会できますか?
productosPopulares
の配列を取得し、各オブジェクトを取得する必要があります。
let referenceToProductosPopulares = FIRDatabase.database().reference(withPath: "productosPopulares")
referenceToProductosPopulares.observeSingleEvent(of: .value, with: { snapshot in
if let value = snapshot.value as? NSDictionary {
let productosPopIds = value.allKeys as! [String]
// get every object
for id in productosPopIds {
let refToProd = FIRDatabase.database().reference(withPath: "productos").child(id)
refToProd.observeSingleEvent(of: .value, with: { snapshot in
// your value
})
}
} else {
print("productosPopulares")
}
})
コードが完全ではありません。より多くの機能を追加する必要があります。しかし、これはアイデアです。
希望する
esPopular
子どもの注文を照会することができ、その子供はtrue
に等しいと返すだけです。
let ref = Database.database().reference(withPath: "productos")
let query = ref.queryOrdered(byChild: "esPopular").queryEqual(toValue: true)
query.observe(.childAdded, with: { (snapshot) in
print(snapshot)
}) { (error) in
print(error)
}
この場合、すべてのオブジェクトをダウンロードしてから、覚えているように検索します。これは良い方法ではありません –
@VladPulichevこの場合、クライアントはすべてのオブジェクトをダウンロードしていません。クエリはクライアント上で行われないので、クライアントは 'esPopular'がtrueの子をダウンロードするだけです。 – Callam
まあ、それはサーバーを行うことはありませんが、はい、私は間違いを書きました。すべてのデータをダウンロードするわけではありません。しかし、サーバーはサーバー側で同じことを行います..たとえば、100000個のオブジェクトサーバーですべての項目をチェックします。それは効率的ではありません。 –
この回答は私のものほど効率的ではありません。人気の高い製品のキーをダウンロードしてから、製品ごとに別のリクエストを作成しています。 – Callam
@Callamあなたのケースでは、10000オブジェクトのサーバー側がすべてのオブジェクトをチェックします。効率的ではありません。私の場合、必要なオブジェクトだけの完全なデータをダウンロードします。彼はIdの配列を持っています。彼はこのIDのアイテムだけをダウンロードする必要があります。 –
@カラム私は、最良の方法はグスタボの完全な論理に依存すると思う。将来的に彼は彼のソリューションのために最善の方法を使用することができます。とにかく。問題は「別の子供から子供を照会する方法」でした。それは私の答えです。この配列はまったく使用しません。私の答えはこの質問の方がいいです。 (あなたがそれを証明することはできませんかもしれません)すべてのsituatuinがあなたのものになるためのよりよい方法:) –