因此,正如标题所暗示的那样,我在 firestore 中有一个如下所示的项目集合:
ParentCollection
items
->docId_1
->name: 'Shirt'
->price: 5
->tags: ['tag1', 'tag2', 'tag3']
->attribute1: 'blah'
->attribute2: 'blahblah'
但是,我需要这些物品有变体,例如不同的尺寸/颜色/等。在这种结构中,唯一的方法是为每个变体拥有一个全新的项目。这并不理想,
这是我目前对要求的看法:
- 包含所有变体的父项,具有唯一的 docId
- 每个变体都有一个唯一的 docId,但以某种方式附加到父项
- 通用属性是父项上的字段(名称、公司、标签等)
- 每个变体都有独特的属性(可用、尺寸/类型、价格)
我目前的计划是这样的:
ParentCollection
items
->parentDocId_1
->name: 'Shirt'
->variants : [{
size: S,
available: true,
variantDocId: variantDocId_1
},{
size: L,
available: false,
variantDocId: variantDocId_2
}]
->tags: ['tag1', 'tag2', 'tag3']
->attribute1: 'blah'
->attribute2: 'blahblah'
SubCollection
variants
->variantDocId_1
->size: 'S'
->price: 5
->parentDocId: parentDocId_1
->variantDocId_2
->size: 'L'
->price: 10
->parentDocId: parentDocId_1
我可以看到几个问题。
这将需要额外的数据库调用,因为 Firestore 在请求父集合时无法获取子集合。
一个大问题是我需要为项目附加一个可用属性,以前我在项目集合级别拥有它,但现在我有变体,我需要将它放在每个变体上。如果我在父集合级别的变量数组中有它,我认为我不能再过滤 algolia 搜索中的可用值,因为一个项目会有多个值。如果我将可用的变量放在子集合中,那么它不会被 algolia 索引,因为它只是索引 Items 集合中的文档。不知道这里有什么解决方案。
我真的不想有一个子集合,我想我可以在没有子集合的情况下完成上述操作,只需将所有唯一属性合并到变量数组中。但是我不会为每个变体都有一个唯一的 docId,而且我很确定我需要它(还不完全确定)。它也不能解决我的可用属性问题。
关于如何正确执行此操作的任何想法?有没有办法在没有子集合的情况下做到这一点?