2013-02-28 7 views
6

ここに記載されているインファイヤーベースインデックスの実装については、https://stackoverflow.com/a/10559689/534086を参照し、降順でデータをソートする方法を理解しようとしています。子 'a'、 'b'、 'c'を持つノードで 'c'、 'b'、 'a'を検索することは可能ですか? (まだ元の順序で検索することができますか?)Firebaseノードの子ノードを逆順にたどることは可能ですか?

ノードを前後に移動することはできず、2つのインデックスを作成する必要がある場合は、並べ替えるキーを生成するための簡単なアルゴリズムです逆の字句順で?数値の場合、-1で乗算することはできますが、文字列を処理する方法がわからないと思います...

答えて

9

"limit()"の仕組みと同様の "reverse()"クエリは、 。 Firebaseはまだこれを行うことはできませんが、追加する予定です。

あなたのユースケースによっては、これを回避するのはかなり簡単かもしれません。たとえば、Firebaseの並べ替えを使用してリストをユーザーに表示する順序で保持している場合は、表示ロジックを変更して後方に表示するだけです(たとえば、appendの代わりにitemを追加する)。たとえば、長いリストのうち最初の10個のアイテムを取得するために、大規模な一連の子からデータのウィンドウを選択するクエリを実行する場合、ソート順は重要ではありません。開始点と終了点クエリーは元に戻される点を除いて同じままです。

+0

「reverse()」は完璧です。回避策の面では、2番目のケース(大きな子供のセット、時には最初のいくつかのアイテムがほしい、時には私は最後のいくつかが欲しい)が私が興味を持っているものです。私はあなたの提案を理解しています...あなたは言っていますか.startAt(100).endAt(20)は100から20に逆方向に反復するでしょうか? (これはすばらしいでしょう) – josh

+6

私はあなたがstartAt(20).endAt(100)をしてからそれらを後方に描画することを提案しています。 –

+11

@andrewleeは約束の約束を約束します。 「逆()とオフセット()をすぐに追加するつもりだ!約束するよ!」 1 1/2年後、私たちはまだ同じ問題を抱えています。 :)あなたのソリューションは、大きなデータセットのページネーションでは機能しません! – CodingWithoutComments

0

limitToLast()を使用して結果セットを自分でソートできますか? Angularを使用している場合、この種のことが分かります。itemsは、$ scopeのFirebase配列オブジェクトです。

<li ng-repeat="item in items | orderBy:'-fieldName'"> {{ item.fildName }}</li> 
関連する問題