2013-06-20 18 views
13

I firebaseで次の階層を持っている、いくつかのデータは機密保持のために隠されています:Firebaseの応答で子ノードを取得せずにFirebaseの子ノードの名前を取得しますか?

enter image description here

私は

(赤で強調)の動画IDのリストを取得しようとしている私ができるだけですべてのノードを取得し、名前を検出して配列に格納します。
しかし、これはパフォーマンスが低下します。私の場合はfirebaseのdataSnapshotが非常に大きいので、すべてのノードの内容を取得してIDを取得するのを避けたいだけです。つまり、IDだけを取得する必要があります。ここで

は私のコードです:

new Firebase("https://PRIVATE_NAME.firebaseio.com/videos/").once(
    'value', 
    function(dataSnapshot){ 

     // dataSnapshot now contains all the videos ids, lines & links 
     // this causes many performance issues 

     // Then I need to loop over all elements to extract ids ! 
     var videoIdIndex = 0; 
     var videoIds = new Array(); 

     dataSnapshot.forEach(
      function(childSnapshot) { 
       videoIds[videoIdIndex++] = childSnapshot.name(); 
      } 
     ); 

    } 
); 

はどのようにして、データ転送の多くを回避し、IDを取得するためにretrivedデータをループを避けるためにIDのみを検索することができますか?これらのIDを直接取得する方法はありますか?

答えて

10

更新:REST APIには、パスのキーだけをフェッチするコマンドが追加されました(shallow)。これはまだSDKに追加されていません。

Firebaseでは、下にあるデータを取得せずにノード名のリストを取得することはできません。とにかくまだ。パフォーマンスの問題は、正規化を使用して解決できます。

基本的には、データを消費可能なチャンクに分割することです。タイトルなどのような2つのメタフィールドで可能なビデオキーのリストを1つのパスに保存し、一括コンテンツを別の場所に保存します。たとえば:

/video_meta/id/link, title, ... 
/video_lines/id/... 

非正規化の詳細については、こちらの記事をチェックアウト:https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

ある@Katoねえ、SDKに 'shallow'を追加する予定はありますか? –

+0

なしHTTPリクエストを作成できないツールを使用していますか?それが実用的でない場合は、SDKリファレンスのsepパスにidのリストを格納できます。マルチパス更新を参照してください。 – Kato

5

をそれは少し古いです、そして、あなたはおそらく既に知っているが、場合には、他の誰かがやって来る。あなたは、この使用してREST API呼び出しを行うことができ、あなたはここでしかパラメータshallow=true

を設定する必要がdocumentation

+0

非常に便利です。2013年6月には利用できませんでした。このアップデートを共有いただきありがとうございます。 –

+0

ウェブAPIでこれを行うことはできますか? – vinesh

+0

私はそうは思わない、彼らはRESTのためにこの10月に浅いだけを紹介した – webduvet

関連する問題