21

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

4

4 に答える 4

69

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

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

ほとんどの開発者は実際に配列を格納しようとはしていません。あなたのケースはその 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
}

これで、Bill Gates を 2 回追加しようとすると、何も実行されません。

attendees["Bill Gates"] = true;

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

于 2016-10-15T06:53:45.430 に答える
5

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

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

あなたが最初に質問するわけではないので、ここで機能をリクエストしてください。

于 2016-10-15T06:57:01.453 に答える