2017-07-09 13 views
0

私はAlexaスキルのためにFirebase関数を使用しています。これは期待どおりに動作していますが、データベース内のデータは特殊で、クエリが値を返すことはできません。結果のないFirebaseデータベース

私の鍵は0101から1231(MMDD)までで、最高の鍵の後ろを照会すると、ファイアベースにはデータがないため、コールバックはありません。

クエリを設定するにはどうすればよいでしょうか?その場合は最初の> = "0101"ですか?

現在呼び出しは

私のAlexaのスキルは、次の誕生日に名前を付ける必要がありますし、私ので、それが唯一、09 11月まで01. 1月後に動作します
admin.database().ref("calendar/birthday") 
.orderByKey().startAt(key).limitToFirst(1).once("child_added") 
.then(function(snapshot) { ... }) 

私のデータベース構造

"calendar" : { 
    "birthday" : { 
     "0111" : { 
     ... -> 1st person 
     }, 
     ... 
     "0710" : { 
     ... -> xth person 
     }, 
     ... 
     "1109" : { 
     ... -> last person 
     } 
    } 
} 

ですデータのクエリ方法を知らないまたは、次の誕生日を見つけるためのより良い方法でデータを構造化できますか?

+0

Firebase SDKの「アレイ強制」によって捕らえられる可能性が高いです。データを変更してキーにプレフィックスを付ける方法はありますか(「day_0101」など)。それは強要を防止し、(それが問題の原因であった場合)問題を解決します。 –

+0

もちろん、私はキーを変更することができますが、これは "データが見つかりません"という問題をどのように修正するのでしょうか?私の最後のキーは「1109」で、上記のクエリを「key = '1110'」と呼ぶと、私は値を取得しません(今は)。 – mars3142

+0

質問を編集して、問い合わせているJSON(テキストとして、スクリーンショットなし)を表示できますか?これは、[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data)の[Export JSON]リンクをクリックすると表示されます。 –

答えて

1

私はあなたが探していると思う:どのように私のクエリに一致する誕生日がないことを知っていますか?

この場合、valueイベントを聞く必要があります。 once()でそれを添付すると、結果があってもいなくても、クエリを添付するとすぐに起動します。

admin.database().ref("calendar/birthday") 
    .orderByKey().startAt(key).limitToFirst(1).once("value") 
    .then(function(snapshot) { 
    if (!snapshot.exists()) { 
     console.log("There are no birthdays on or after "+key); 
    } 
    else { 
     snapshot.forEach(function(daySnapshot) { 
     console.log("There is a birthday on "+daySnapshot.key); 
     }); 
    } 
    }) 

exists()は、クエリに一致する結果が存在しないことを検出します。 elseforEach()ループは、valueをクエリに使用した結果です。 Firebaseデータベースに対してクエリを実行すると、複数の結果が出現する可能性があります。したがって、スナップショットにはそれらの結果のリストが含まれています。結果が1つだけの場合でも、スナップショットには1つの結果のリストが含まれます。

+1

OPは、ラップアラウンド/ラウンドロビン型のクエリを使用することで常に結果を得る方法を望んでいたと思います。例えば。 11月11日(1111)以降の次の誕生日を尋ねると、「誕生日なし」ではなく、1月11日(0111)の誕生日に戻ってくるはずです。リストに少なくとも1つの誕生日がある場合は、決して「誕生日なし」という結果はありません。 – mbirth

+0

はい、これは私が探していた解決策でした。現在の検索結果がない場合は、今度は「来年」を検索することもできます。私はいつもあなたの答えに頼ることができることを知っています。ありがとう。 – mars3142

+0

Markusを明確にしてくれてありがとう!検索を自動的に折り返す方法はありません。しかし実際には、 'value'イベントを使用して、2番目のクエリを起動する必要があると判断できます。 –

関連する問題