MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Salvar, organizar e consultar produtos, opções/tags e categorias


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.