2017-01-02 9 views
1

配列を含む大きなJSONファイルがあります。私は自分のアプリのバックエンドにFirebaseを使っています。私はFirebaseArrayを使ってデータを保存したいと思っています。JSONアレイをFirebaseArrayとしてFirebaseにインポートするにはどうすればよいですか?

私のAngularアプリからFirebaseArrayを作成してデータを追加するのは簡単ですが、私のアプリの本質は、まず何かFirebaseにインポートする必要があるデータを取得したことです。

FirebaseのWebサイトでは、インポートするための唯一のオプションはJSONからです。 JSONファイルをインポートすると結果は数値キーのあるオブジェクトになります。これは配列のようなものですが、大きな問題があります。

{ 
    "posts": { 
    "0": { 
     "id": "iyo0iw", 
     "title": "pro patria mori" 
    }, 
    "1": { 
     "id": "k120iw", 
     "title": "an english title" 
    }, 
    "2": { 
     "id": "p6124w", 
     "title": "enim pablo espa" 
    } 
    } 
} 

ユーザーはアイテムの位置を変更でき、アイテムの位置もアイテムが一意に識別される方法です。複数のユーザーがいる場合、次の問題が発生する可能性があります。

  • サラ: "みなさん、こんにちは"
  • トレバーへの変更後の[0]タイトル:ポストとのスワップポスト[1]の位置[2]
  • サラ:この」に変更後の[1]タイトルがありますインデックス1に投稿してください。

短い時間内に次のような操作が行われた場合、FirebaseはSarahがタイトルを変更したときに見たことをPost [1]で確認できません。更新。

JSONファイルをインポートして配列をFirebaseArraysにする方法です。数値キーを持つオブジェクトではなく、配列のようなもので、上記の問題を共有します。

答えて

1

データベースにインポートしたものは、実際には配列です。 Firebase Realtime Databaseは、データをキー/値ペアのネストされた階層として表現します。配列はキーと値のペアのセットです。キーはすべて数字で、通常は0から始まります。これは、あなたの質問に表示されている構造とまったく同じです。

+0

IDはキーです。複数の人が日を変更する可能性があり(アイテムの位置を変更する可能性があるため)、配列は私のアプリにとっては悪い考えです。詳細については、こちらをご覧ください:https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html –

+0

質問を明確にするために更新しました。 –

+0

「投稿」の下にある他の子どもとの相対的な順序を決定する別のフィールドが各投稿に必要なように聞こえます。 orderByChildを使用して、その注文を照会することができます。他の値が表示順序を決定するので、この場合、子のインデックス/キーはまったく重要ではありません。 –

1

AngularFire FirebaseArrayを使用してデータベースに書き込むことによって作成されるデータの種類を生成するには、JSONを前処理する必要があります。

クライアントでFirebaseプッシュIDが生成され、引数なしでpushを呼び出すことで生成できます。

あなたはこのようなFirebaseプッシュIDキーを持つオブジェクトに配列を変換することができます:はい、私は、これは技術的に配列ですけど、私の質問は、具体的FirebaseArrayの、独自の持っている特別なオブジェクトであるかについて尋ね

let arr = ["alice", "bob", "mallory"]; 
let obj = arr.reduce((acc, val) => { 
    let key = firebase.database().ref().push().key; 
    acc[key] = val; 
    return acc; 
}, {}); 
関連する問題