2016-10-18 7 views
0

私は色などの属性を追加する必要があるソリューションを構築しています。製品は複数の色を持つことができます。Firebaseでキーの複数の属性(値)を構造化してフィルタリングする

私の質問は、Firebaseやオブジェクトの配列として自分のデータ属性を構造化するか、それとも別の方法ですか?

私は.eQualToと私の製品をフィルタリングしたい(またはより良い方法がある場合) https://firebase.google.com/docs/reference/js/firebase.database.Query#equalTo

例1)

{ 
name: "My red n' white product", 
color: ["white", "red"] 
} 

例2)

{ 
name: "My red n' white product", 
color: {red: true, white: true} 
}, 
{ 
name: "My blue product", 
color: {blue : true} 
} 

例3)?

答えて

2

ここに実現するいくつかのこと:

  • あなたは配列を格納する必要性を感じるが、それに操作をしたいときはいつでも:あなたはおそらく代わりにセットを格納するために探しています。 Setting arrays in Firebase using Firebase console

  • 色をセットとして保存しても、最終的にはref.orderByChild('color/blue').equalTo(true)のようなクエリが表示されます。このクエリは機能しますが、['color/blue', 'color/red', 'color/white']のインデックスが定義されている必要があります。カテゴリ/色が動的になるとすぐに、プログラムでインデックスを追加することはできないため、これはできません。

このデータをモデル化するための慣用的な方法は、「ユースケースに従う」ことです。特定のカテゴリ/色のアイテムのリストを取得したいとします。だから、その場合には、各色ごとに項目のリストを格納します。

itemsByColor: { 
    red: { 
    keyOfRedAndWhiteProduct: true 
    }, 
    white: { 
    keyOfRedAndWhiteProduct: true 
    }, 
    blue: { 
    keyOfBlueProduct: true 
    } 
} 

今すぐ簡単にアイテムのキーのリストを検索することができますし、それらをロードします。

Firebase guide on structuring data、特にmodeling data that scalesのセクションもお読みください。そしてNoSQLデータベースへの移行を行っている人にとっては、NoSQL data modelingのこの記事は必須です。

関連する問題