2016-10-15 6 views
11

私はデモアプリケーション用のデータを準備するためにFirebaseコンソールを使用しています。データ項目の1つは出席者です。出席者は配列です。 Firebaseに配列としていくつかの出席者を追加したいと思います。私はFirebaseには配列はありませんが、キーを持つオブジェクトは(時系列順に)理解しています。サンプルデータを準備するにはどうしたらいいですか?私の現在のFirebaseデータは以下のようになります。 enter image description hereFirebaseコンソールを使用してFirebaseのアレイを設定する

答えて

35

Firebaseデータベースは配列を格納しません。辞書/関連配列を格納します。あなたが入手できる最も近いものは、次の通りです。

attendees: { 
    0: "Bill Gates", 
    1: "Larry Page", 
    2: "James Tamplin" 
} 

この構造は、Firebaseコンソールでビルドできます。 Firebase SDKの1つを使用してそれを読み取ると、配列に変換されます。

firebase.database().ref('attendees').once('value', function(snapshot) { 
    console.log(snapshot.val()); 
    // ["Bill Gates", "Larry Page", "James Tamplin"] 
}); 

これは、あなたが探している結果である可能性があります。しかし、あなたが配列を格納していない場合、Firebaseがそれを好む理由についてこのブログの記事を読むことをお勧めします:https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html。あなたが実際に

ほとんどの開発者が実際に配列を格納しようとしていないと私はあなたの場合は、それらの一つかもしれないと思うのセットを必要とするとき

は、配列を使用しないでください。たとえば、「Bill Gates」は2回出席者になれますか?

attendees: { 
    0: "Bill Gates", 
    1: "Larry Page", 
    2: "James Tamplin", 
    3: "Bill Gates" 
} 

ない場合、あなたは彼を追加する前に、彼は、アレイ内に既にありますかどうかを確認する必要があるとしています。

if (!attendees.contains("Bill Gates")) { 
    attendees.push("Bill Gates"); 
} 

これは、データ構造がユースケースに対して最適以下であることを示す明確な兆候です。新しい子を追加する前に既存の子をすべてチェックすると、スケーラビリティが制限されます。

この場合、本当に必要なのはセットです。各子が1回だけ存在できるデータ構造です。 Firebaseでこのようなあなたのモデルセット:

attendees: { 
    "Bill Gates": true, 
    "Larry Page": true, 
    "James Tamplin": true 
} 

そして、あなたは、ビル・ゲイツ氏をもう一度追加しようとするたびに、今、それは-OPません:

attendees["Bill Gates"] = true; 

だからではなく、独自性をコードするのでデータ構造はそれを暗に解決します。

+0

、コンソールでIDをプッシュすることはできません。私はセットを使うか、アプリからプッシュします。ありがとう。 – vijayst

+0

Firebaseコンソールを使用して配列に値を設定するかどうかを指定できますか? –

3

私の他の答えを書いた後、あなたは単純にコンソールにプッシュIDを追加する方法を探していたかもしれないことに気付きました。

これは現時点では機能していません。ほとんどの場合、テストデータを入力するときに異なるタイプのキーを使用するか、別のタブに小さなJavaScriptスニペットを入れてキーを生成し、それらをコピー/ペーストします。

を実行してくださいhereという機能をリクエストしてください。あなたが間違いなく最初に質問するからです。

0

ファイアベースアレイ?はい、数週間前に同じ問題がありますが、私はhereに見つかりました。最後に私はChartJSで使うことができます。現時点で

function jamToArray(snapshot) { 
 
    const returnArr = []; 
 
    snapshot.forEach(function(childSnapshot) { 
 
     const item = childSnapshot.val().time; 
 
     returnArr.push(item); 
 
    }); 
 
    return returnArr; 
 
}; 
 

 
firebase.database().ref('sensor').limitToLast(10).on('value', function(snapshot) { 
 
    const jam  = jamToArray(snapshot); 
 
});

関連する問題