2016-10-18 33 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 data modeling的文章是任何人轉向NoSQL數據庫的必讀書籍。