2016-12-20 7 views
1

この質問には1,000件の回答があることが分かりますが、それは部分的には私がそれを働かせることができないという事実によって混乱しています。Firebase(Web)がorderByChildを動かすことができない

orderByChildクエリ/フィルタを機能させることができません。私はそれを説明すること、オンラインで少なくとも25のチュートリアル、ガイド、および記事で見てきたし、それらはすべて私がやっている正確に何をすると言っているようだ:

var dbRef = firebase.database().ref(); 
var filterExperience = dbRef.child("Users").orderByChild('trade_general').equalTo('Construction'); 

filterExperience.on('child_added', snap => { 

    // Just trying to figure out if anything's even happening 
    console.log("Test" + snap.val());  

    // Set Card ID  
    $('#cand-card').attr('id', 'cand-card' + snap.key); 

    // Set Name 
    $('#fullname').attr('id', 'fullname' + snap.key); 
      $('#fullname' + snap.key).text(snap.child("Personal").child("first_name").val() + " " + snap.child("Personal").child("last_name").val()); 

// And so on... 

そして、記録のために、firebaseはすべてのセットです。適切にアップ。 HTMLページの一番下にスニペットがあり、問題なしでレコードを読み書きしています。

私のデータベースは次のようになります。

Users 
| 
|--KYQ0L5TStcZM1rgVpte 
    | 
    |-Account 
    |-Availability 
    |-Education 
    |-Location 
    |-Work_History 
     | 
     |-Recent_Job_1 
     | 
     |-employer_name: "abc company" 
     |-job_position: "concrete finisher" 
     |-trade_general: "Construction" 

私は取得していた結果ではありません:絶対に何も。私が 'スナップ'の直後に実行するテストのコンソールの中には何もありません。ページ上には何もありません。

+1

JSONには「trade_general」という名前のプロパティはありません。 –

+0

私の悪いです。それはFirebaseにあり、ここでそれをコピーするのを忘れてしまった。私は数値的なstartAtとendAtを使ってクエリを取得するために長い間試していましたが、それをあきらめて(もっと見かけ上)簡単に作業できるかどうかを確認しました。 equalToのように。だから、 "job_years"は私の頭の中でこの質問の関連情報として詰まっていました。 –

答えて

0

Firebaseデータベースクエリでは、問い合わせ先の場所の各が考えられ、指定した子+条件を使用します。パスはあなたが行うことができます固定されているのであれば:

dbRef.child("Users") 
    .orderByChild('Work_History/Recent_Job_1/trade_general') 
    .equalTo('Construction') 

だから、これはそれに基づいて、各ユーザおよびフィルタのWork_History/Recent_Job_1/trade_generalを考えます。

しかし、おそらくRecent_Job_1は動的パスです。その場合、Firebaseデータベースのクエリモデルでは不可能な、ネストされた動的パスでプロパティをクエリしようとしています。 Firebaseのインデックスは基本的に単一値マップであり、このタイプのクエリはそれらのインデックスでは機能しません。

必要なクエリを許可するには、別のデータ構造を見つける必要があります。

これを行う1つの方法は、最新の値を各ユーザーの直接的なプロパティとして保持することです。これにより、最新のジョブのtrade_general値でフィルタリングすることができます。

trade_generalの値をユーザーとジョブにマップする別のデータ構造を設定することもできます。例えば。

UsersJobTradeGenerals 
    KYQ0L5TStcZM1rgVpte 
    Construction 
     Recent_Job_1: true 
     Recent_Job_4: true 
    OtherTradeGeneral 
     Recent_Job_2: true 
     Recent_Job_3: true 
+0

完璧!助けてくれてありがとう。クエリが機能するようになりました(recent_job_1は最終的に動的に生成されますが、開発中は静的であるため、少なくともクエリを理解できるようになりました)。次に、私の説明したようにデータを再構成します。 –

関連する問題