0

Firebase のリストで最も優先度の高い子を取得したいのですが、すべての子をクライアントに保持することなく、どのようにすればよいですか?

私が考えることができる1つの方法は、リンクされたリストのようなデータ構造をfirebaseに直接維持することです:

head: 0
nodes:
  0: {next: 10}, priority=1
  10: {next: 4}, priority=23
  4: {next: 2}, priority=45
  2: {next: null}, priority=67

次に、0 の優先度を に更新するとします。これによりでイベントが46トリガーされ、それに応じてノード 0、10、および 2 のヘッド ポインタと次のポインタが更新されます...on('child_moved')prevChildName=4

もう 1 つの方法は、ID のリストを 1 か所に保持し、それに応じて更新することです。

list: "0, 10, 4, 2"

しかし、リストが大きくなるにつれて、各更新は帯域幅の点で非常にコストがかかります.

これを行うより良い方法はありますか?

4

2 に答える 2

1

limit()およびを使用しendAt()て、最高の優先度を取得します。endAt引数なしは最高値から始まります。

var ref = FB.limit(2).endAt();

これが実際の動作を示すフィドルです。楽しい楽しい楽しい!: )

于 2013-04-11T16:03:36.357 に答える
0

何かが足りないかもしれませんが、これはまさにクエリ関数の目的のように思えます。優先度番号が最も低いアイテムを取得するには、次のことができるはずです。

ref.startAt().limit(1).once('child_added', function(childSnapshot) {
  // childSnapshot is the item with the lowest priority number (item 0 in your example).
});
于 2013-04-11T15:44:51.907 に答える