web-dev-qa-db-ja.com

Firebaseコンソールを使用してFirebaseで配列を設定する

Firebaseコンソールを使用して、デモアプリのデータを準備しています。データ項目の1つは出席者です。参加者は配列です。 Firebaseで配列として数人の参加者を追加したいと思います。 Firebaseには配列がなく、キーを持つオブジェクト(時系列順)があることを理解しています。サンプルデータを準備するにはどうすればよいですか?現在のFirebaseデータは次のようになっています。 enter image description here

18
vijayst

Firebase Databaseは配列を保存しません。辞書/関連配列を保存します。だからあなたが得ることができる最も近いものは:

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

Firebase Consoleでこの構造を構築できます。そして、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

実際にセットが必要な場合は、配列を使用しないでください

ほとんどの開発者は実際に配列を保存しようとはしておらず、あなたの場合もその1つであると思います。たとえば、「ビル・ゲイツ」を2回出席者にすることはできますか?

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

そうでない場合は、彼を追加する前に、彼が既に配列にあるかどうかを確認する必要があります。

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

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

この場合、本当に必要なのはセットです。つまり、各子が一度しか存在できないデータ構造です。 Firebaseでは、次のようなモデルセットを作成します。

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

そして、ビルゲイツを2回追加しようとすると、何もしません。

attendees["Bill Gates"] = true;

そのため、一意性の要件をコーディングする代わりに、データ構造が暗黙的に解決します。

50

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

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

do機能をリクエストしてください here 、あなたは間違いなく最初の質問ではないので。

4

ええ、私は数週間前にあなたと同じ問題を抱えていましたが、 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);
});
0
Elonelon