2017-11-02 4 views
0

私は、ユーザーがGoogle FireBase DBにデータを送信するためのフォームを持っています。フォームに情報を記入した人物の一覧とその出現者の一覧を示す別のページがあります。キーベースで返されたfirebase返されたオブジェクト

私は、特定のキー値を持つオブジェクトを1つだけに制限しようとしていますが、fireBaseのドキュメントでは、 "equalTo"を使用して結果を制限することができます。

私の問題は、時間の経過とともに複数のサブミッションを提出することで、以下に挙げるオブジェクトキーには「ユーザー」という再発値があります。

以下は、私がFireBaseを返すサンプルオブジェクトです。

"abc1234567891" : { 
    "user" : "Frank Albert", 
    "email" : "[email protected]", 
    "address" : "123 Some where nice", 
    "socialspend" : 10,000, 
    "printimpact" : 180,000 
}, 

"abc1238567891" : { 
    "user" : "James Miller", 
    "email" : "[email protected]", 
    "address" : "123 Some where nice", 
    "socialspend" : 500, 
    "printimpact" : 24,500 
}, 

"abc1234567891014348" : { 
    "user" : "Frank Albert", 
    "email" : "[email protected]", 
    "address" : "123 Some where nice", 
    "socialspend" : 10,800, 
    "printimpact" : 80,000 
}, 

"abc12341267891" : { 
    "user" : "Jessica Smith", 
    "email" : "[email protected]", 
    "address" : "123 Some where nicer", 
    "socialspend" : 2,560, 
    "printimpact" : 70,800 
} 

上記生成するコード以下の通りですが、カスタムコード(クライアント側またはクラウドの機能のいずれかで)なしでそれをする方法があり

var usersList = firebase.ref('campaignSubmission'); 

usersList.orderByChild('user').limitToLast(5).once('value') 
.then(function(snapshot){ 

    var cpSumission = snapshot.val(); 
    keys = Object.keys(cpSumission); 
    console.log(cpSumission); 

    for(var i = 0; i < keys.length; i++) { 
     var k = keys[i]; 

     // Store whats needed for displaying later 
     var listEmployeeName = cpSumission[k].user; 
     var listSocialSpend = cpSumission[k].printimpact; 
     ... 
    } 

} 
+0

あなたが表示するJSONノードにはプロパティー 'user'がありませんので、 'orderByChild(' user ')'は何もしないようです。あなたが始めた最小限のJSONと、望む結果を表示できますか? –

+0

上記のJSONはfirebaseが返すフォーマットと同じですが、私はそのプロパティが存在することを示すためにJSONを修正しました。 –

+0

ありがとうございます。それは、あなたが注文しているプロパティがJSONに存在するので、役立ちます。しかし、私はあなたが何を達成しようとしているのか、何が問題なのかまだ分かりません。あなたの現在のコードについては何が問題になりませんか? –

答えて

0

私のコードベースをスニペット。いつものように、NoSQLデータベースと同様に、ソリューションはあなたが持っているユースケースのデータモデルを拡張することです。この場合、あなたは、各ユーザの最新の投稿を読みたいように聞こえるので、それは私があまりにもデータベースにモデル化したいものです。

"latestSubmissionByUserName": { 
    "Frank Albert": { 
     "uid": "abc1234567891", 
     "email" : "[email protected]", 
     "address" : "123 Some where nice", 
     "socialspend" : 10,000, 
     "printimpact" : 180,000 
    } 
    "James Miller": { 
     "uid": "abc1238567891", 
     "email" : "[email protected]", 
     "address" : "123 Some where nice", 
     "socialspend" : 500, 
     "printimpact" : 24,500 
    }, 
    "Jessica Smith": { 
     "uid": "abc12341267891", 
     "email" : "[email protected]", 
     "address" : "123 Some where nicer", 
     "socialspend" : 2,560, 
     "printimpact" : 70,800 
    } 
} 

私たちはそこに、ここでキーとしてuserプロパティを使用しているので、定義によって重複することはできません。別のユースケースは、あなたが、私は正確にそれをモデル化するだろう。その場合には、ユーザーのリストを読みたいということかもしれません

var usersList = firebase.ref('latestSubmissionByUserName'); 

usersList.orderByKey().once('value').then(function(snapshot){ 
    snapshot.forEach(function(userSnapshot) { 
     console.log(userSnapshot.key); 
    }); 
}); 

"userNames": { 
    "Frank Albert": true, 
    "James Miller": true, 
    "Jessica Smith": true 
} 
ので、各ユーザの最新の投稿を読むことほど容易になります

上記の同じコードは、これからもユーザー名を読み書きします。

両方のアプローチでは、一般的なNoSQLデータベースとFirebaseの共通テーマが強調されています。データのモデリングと複製が行われ、アプリのユースケースが可能になることがよくあります。さらに、読み取りパフォーマンスのために書き込みパフォーマンスを犠牲にします(複製されたデータを更新する必要があるため)。

この詳細については、NoSQL data modelingと表示Firebase for SQL developersをお読みください。

関連する問題