これは非常に簡単な回答かもしれませんが、実際にデータをどのように構成するかによって大きく変わります。
常に100人のユーザーがいて、65歳から1歳までのすべてのユーザーには、簡単にアクセスできます。
同様に、ユーザーXYZの位置を希望する場合は、これも簡単です。 /ユーザー/位置による位置ソート上のクエリに続い
位置(または35)で、トップ2のユーザーをロードする方法もあります
users:
user_id_0
position: 15
user_id_1
position: 32
user_id_2
position: 7
、その後queryLimitedToFirstは(2)user_id_2とuser_id_0を返します。 。
編集:より多くのデータに基づいて
、ここではカップルより多くのオプションがあります。あなたがuid_2のスコアに基づいて位置を知りたい場合は、我々は5人のユーザー、スコアと各(私は、リスト内の自分の立場」を指摘)
uid_0: 50 //pos 2
uid_1: 25 //pos 1
uid_2: 73 //pos 4
uid_3: 10 //pos 0
uid_4: 58 //pos 3
を持って考える - 私はあなたのプラットフォームを知りません私は、一般的な流れ与える:
、その後、彼のスコア、73を取得するためにステップ2)queryOrderedByChild(スコア).startingAtValue(73)
ステップ1)クエリuid_2を、73から何にスコアでノードを取得最高得点は
手順3です)結果はスナップショットになりますので、sn apshot.childrenCount、uid_2の位置は4になります。これにより、ロードされるノードの数が減ります。
リストが遠いほど、データが多くロードされるという欠点があります。スコアだけのノードが1000個しかない場合、それは大量のデータではありません。
次の解決策では、大量のデータを回避できますが、アプリケーションによって多くの作業が必要になります。
もちろん、ご使用のプラットフォームがアレイをサポートしている場合、これは超簡単な作業です。上の同じ構造体を使用して、子を配列に配列し、位置を知りたいuidのインデックス番号を取得します。
スウィフトコード
let ref = self.myRootRef.childByAppendingPath("scores")
ref.queryOrderedByValue().observeEventType(.Value, withBlock: { snapshot in
var myArray = [String]()
for child in snapshot.children {
let key = child.key as String
myArray.append(key)
}
let pos = myArray.indexOf("uid_0")
print("postion = \(pos!)")
})
出典
2016-06-14 17:46:30
Jay
ページネーションを実装したり、指定された条件でアイテムを取得したりするのはどうですか? [1](https://www.firebase.com/docs/web/api/query/limittofirst.html) [For 2](https://www.firebase.com/docs/web/api) /query/equalto.html) –
@Rohit Goyal、解決策を見つけましたか? – JCarlos