Firebase构造和过滤键上的多个属性(值)

Firebase构造和过滤键上的多个属性(值),firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我正在构建一个解决方案,需要在我的产品上添加颜色、类型等属性。产品可以有多种颜色 所以我的问题是,我应该在firebase中以数组或对象的形式构造数据属性,还是有其他方法 我想用.eQualTo过滤我的产品(或者如果有更好的方法) 例1) 例2) 例3)这里要实现的几件事: 每当您觉得需要存储数组,但又想对其执行contains()操作时:您可能希望存储一个集合。有关更多详细信息,请参见我之前的回答: 即使将颜色存储为一组,最终也会出现如下查询:ref.orderByChild('color

我正在构建一个解决方案,需要在我的产品上添加颜色、类型等属性。产品可以有多种颜色

所以我的问题是,我应该在firebase中以数组或对象的形式构造数据属性,还是有其他方法

我想用.eQualTo过滤我的产品(或者如果有更好的方法)

例1)

例2)


例3)

这里要实现的几件事:

  • 每当您觉得需要存储数组,但又想对其执行
    contains()
    操作时:您可能希望存储一个集合。有关更多详细信息,请参见我之前的回答:

  • 即使将颜色存储为一组,最终也会出现如下查询:
    ref.orderByChild('color/blue').equalTo(true)
    。此查询工作时,需要为
    ['color/blue'、'color/red'、'color/white']
    定义索引。一旦您的类别/颜色是动态的,这就不可能了,因为您不能以编程方式添加索引

对这些数据进行建模的更惯用的方法是“遵循用例”。您希望获得特定类别/颜色的项目列表。因此,在这种情况下,为每种颜色存储一个项目列表:

itemsByColor: {
  red: {
    keyOfRedAndWhiteProduct: true
  },
  white: {
    keyOfRedAndWhiteProduct: true
  },
  blue: {
    keyOfBlueProduct: true
  }
}
现在,您可以轻松地查找项目键列表,然后加载它们


我强烈建议您也阅读,特别是关于。这篇文章是任何向NoSQL数据库过渡的人的必读读物。

这里要实现的几点:

  • 每当您觉得需要存储数组,但又想对其执行
    contains()
    操作时:您可能希望存储一个集合。有关更多详细信息,请参见我之前的回答:

  • 即使将颜色存储为一组,最终也会出现如下查询:
    ref.orderByChild('color/blue').equalTo(true)
    。此查询工作时,需要为
    ['color/blue'、'color/red'、'color/white']
    定义索引。一旦您的类别/颜色是动态的,这就不可能了,因为您不能以编程方式添加索引

对这些数据进行建模的更惯用的方法是“遵循用例”。您希望获得特定类别/颜色的项目列表。因此,在这种情况下,为每种颜色存储一个项目列表:

itemsByColor: {
  red: {
    keyOfRedAndWhiteProduct: true
  },
  white: {
    keyOfRedAndWhiteProduct: true
  },
  blue: {
    keyOfBlueProduct: true
  }
}
现在,您可以轻松地查找项目键列表,然后加载它们

我强烈建议您也阅读,特别是关于。这篇文章是任何向NoSQL数据库过渡的人必读的

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