私のデータ構造がある値:ページネーションは、次のように
users:
user1:
-carModel: evo x
-username: importguy
-region: north east
user2:
-carModel: evo x
-username: evoguy
-region: north east
user3:
-carModel: mustang gt
-username: muscleguy
-region: south east
私は、ユーザーが車を検索することができるようにしたい、それらの特定の車を所有するユーザーのEVO、表示結果を言います。私は私のアプリのためにこれらの結果を改ページする必要があります。問題は、これを適切に照会する方法を理解できないことです。ここに私がこれまで持っていたものがあります。
func fetchUsersBy(car: String) {
if self.carCurrentKey == nil {
let ref = USER_REF.queryOrdered(byChild: "carModel").queryStarting(atValue: car).queryLimited(toFirst: 3)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
guard let snap = snapshot.children.allObjects as? [FIRDataSnapshot] else { return }
guard let last = snapshot.children.allObjects.last as? FIRDataSnapshot else { return }
snap.forEach({ (snapshot) in
guard let userDict = snapshot.value as? Dictionary<String, AnyObject> else { return }
guard let carModel = userDict["carModel"] as? String else { return }
if carModel.contains(car) {
print(snapshot)
}
})
self.carCurrentKey = last.key
self.carCurrentValue = last.childSnapshot(forPath: "carModel").value as? String
})
} else {
// where to start next query?
let ref = USER_REF.queryOrder(byChild: "carModel").queryStarting(atValue: self.carCurrentValue)
}
}
私はスナップショットにその特定の車種を持つすべてのユーザーをグループ化するためには、carModelでクエリを注文する必要があります。すべての車種モデルが同じ値なので、ページネーションの次のクエリをどこで開始するか終了させるかはわかりません。 elseブロックにある参照を使用すると、上記のブロックと同じ場所でクエリが開始されます。どんな助けやアドバイスも大歓迎です。
私はファンアウトを行い、車種別の構造を作ることを検討しました。しかし、これは難しいだろう。
はうまくいくようですが、とにかく迅速に解決策を投稿できますか? – Dirty
答えは、startAt()の呼び出しでchildKeyを使用することです。残りは、あなたが次に向かうところを見るのを助けるための単なるボーナスです。 – Kato
ありがとうございます!答えが受け入れられました! – Dirty