我正在构建一个解决方案,我需要在我的产品上添加颜色,类型等属性。产品将能够有多种颜色。
所以我的问题是,我应该将我的数据属性构建为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)?
答案 0 :(得分:2)
这里要实现的一些事情:
每当您觉得需要存储数组,但是想要对其执行contains()
操作时:您可能希望存储一个集合。有关详情,请参阅我之前的回答: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上的这篇文章是必读的。