Estou executando um site de comércio eletrônico, também. Aqui está meu conselho sobre como eu implemento os recursos que você mencionou. Espero que ajude.
- Categorias
Eu os organizo em uma estrutura plana, no seu caso seria:
{_id: 1, name: "Electronics", parentId: 0, idPath: "/0/1/" ...}
{_id: 2, name: "Computers", parentId: 1, idPath: "/0/1/2/", ...}
{_id: 3, name: "Graphic Cards", parentId: 2, idPath: "/0/1/2/3/", ...}
E o produto agora precisa estar apenas nas categorias de folha. No seu caso:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
O produto pode estar em várias categorias, é claro, então o
categoryIds
permanece uma matriz. Aqui está a parte complicada. Quando você lista o Electronics
categoria, você pode encontrar todas as suas subcategorias por: db.categories.find({idPath: /^\/0\/1/})
idPath
index funciona aqui, então será rápido. quando você descobrir todas as subcategorias, poderá encontrar facilmente todos os produtos nelas (criar índice no categoryIds
de Product
coleção). Ou, alternativamente, você pode ler todas as categorias na memória e criar uma tabela de hash com a chave->categoryId, valor->[todas as subcategorias]. Suas categorias geralmente não mudam com frequência e você não terá muitas categorias. Assim vai ficar tudo bem.
- Etiquetas/Opções
Em primeiro lugar, acho que há algo errado com sua categoria.
Women fashion
é algo genérico, você deve colocar seu produto em algo mais específico, e as opções também devem estar lá. Por exemplo, talvez haja uma categoria coat
que tem o size
&color
, exceto women fashion
. Embora ainda possa haver color
opção em women fashion
porque é uma característica comum de todas as subcategorias.Se você pensar bem, por que todas as subcategorias estão organizadas em uma categoria pai? porque eles têm algo em comum. Essa parte comum deve ser as opções comuns da categoria pai. ou seja, deve haver uma herança entre todas as categorias e subcategorias pai. Por exemplo:
Em seguida,
coat
finalmente teria 2 opções color
&size
. sun glasses
:color
&shape
. Quando você está vendo women fashion
, há apenas 1 opção color
. Ele filtra as subcategorias também porque elas herdam de women fashion
.Quanto aos valores de cor, minha ideia é usar apenas as cores padrão
Strawberry Red
na verdade é red
, Tangerine
na verdade é orange
. Você realmente não quer que eles apareçam quando você filtra os produtos. Caso contrário, haveria muitas opções, definitivamente não é bom para a experiência do usuário.No entanto, além de
color
opção da categoria, meu site também tem algo chamado customizable options
. Essas opções são definidas apenas nos produtos. Eles nunca aparecem quando você visualiza a categoria. Aqui você pode ter Strawberry Red
&Tangerine
. Na minha opinião, estas não são propriedades 'naturais' de um produto. Eles são usados apenas para deixar o usuário mais confortável ao visualizar o produto. Assim também você pode ter opções deste tipo como Tangerine with figure
etc.Mais uma coisa sobre opções. você pode querer marcar quais opções devem ser usadas para filtrar produtos. Por exemplo
color
é definitivamente um. Enquanto dimension
talvez não. Sobre os tipos de opções. O seu está bem se for o suficiente para você. Eu tenho muito mais tipos como
Number
, String
, Single Choice
, Multiple Choices
. Também pretendo implementar a Unit
. Parte complicada de Unit
é isso por exemplo 1GB = 1024MB = 1024*1024B
Portanto, quando você obtém um disco rígido de 1 GB e 1 TB, convém fazer uma conversão antes de filtrar os produtos. Isso está fora do tópico, vou voltar à sua pergunta.
Observe que, embora as opções de categorias diferentes tenham o mesmo nome. Eles não são provavelmente a mesma coisa.
Material
de Coat
e Furniture
são 2 coisas diferentes. Por isso, costumo definir diferentes opções para diferentes categorias. Assim, talvez color
para toys
e color
para women fashion
. Isso não entra em conflito com a herança mencionada acima porque de algum nível, as subcategorias começam a compartilhar as mesmas opções. Isso está completamente relacionado a como você organiza sua estrutura de categorias. E se você quiser mudar a estrutura da categoria ou mover produtos em algum momento, seria doloroso. Portanto, tenha cuidado ao definir suas categorias. Isso é tudo que me vem à cabeça. Receio não ser um falante nativo de inglês, portanto, você pode achar parte da minha resposta difícil de entender. Sinta-se à vontade para me informar.