Je gère également un site e-commerce. Voici mes conseils sur la façon dont j'implémente les fonctionnalités que vous avez mentionnées. J'espère que ça aide.
- Catégories
Je les organise dans une structure plate, dans votre cas ce serait :
{_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/", ...}
Et le produit doit maintenant être uniquement dans les catégories de feuilles. Dans votre cas :
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
Le produit peut être dans plusieurs catégories bien sûr, donc les categoryIds
reste un tableau. Voici la partie délicate. Lorsque vous répertoriez l'Electronics
catégorie, vous pouvez trouver toutes ses sous-catégories par :
db.categories.find({idPath: /^\/0\/1/})
idPath
index fonctionne ici donc ça va être rapide. lorsque vous découvrez toutes les sous-catégories, vous pouvez facilement trouver tous les produits qu'elles contiennent (construisez l'index sur les categoryIds
de Product
collecte).
Ou bien, vous pouvez lire toutes les catégories en mémoire et créer une table de hachage avec la clé->categoryId, value->[all the subcategories]. Vos catégories ne changeront généralement pas fréquemment et vous n'aurez pas beaucoup de catégories. Donc tout ira bien.
- Balises/Options
Tout d'abord, je pense qu'il y a quelque chose qui ne va pas avec votre catégorie. Women fashion
est quelque chose de générique, vous devriez mettre votre produit dans quelque chose de plus spécifique, et les options devraient être là aussi. Par exemple, il peut y avoir une catégorie coat
qui a la size
&color
, autre que women fashion
. Bien qu'il puisse encore y avoir de la color
option en women fashion
car c'est une caractéristique commune à toutes les sous-catégories.
Si vous y réfléchissez, pourquoi toutes les sous-catégories sont organisées dans une seule catégorie parent ? parce qu'ils ont quelque chose en commun. Cette partie commune devrait être les options communes de la catégorie parent. c'est-à-dire qu'il doit y avoir un héritage entre toutes les catégories et sous-catégories parentes. Par exemple :
Puis coat
aurait finalement 2 options color
&size
. sun glasses
:color
&shape
. Lorsque vous regardez women fashion
, il n'y a qu'une seule option color
. Il filtre également les sous-catégories car elles héritent de la women fashion
.
En ce qui concerne les valeurs de couleur, mon idée est de n'utiliser que les couleurs standard Strawberry Red
est en fait red
, Tangerine
est en fait orange
. Vous ne voulez pas vraiment qu'ils apparaissent lorsque vous filtrez les produits. Sinon, il y aurait trop d'options, certainement pas bonnes pour l'expérience utilisateur.
Cependant, en plus de la color
option de la catégorie, mon site a aussi quelque chose appelé customizable options
. Ces options ne sont définies que sur les produits. Ils n'apparaissent jamais lorsque vous visualisez la catégorie. Ici, vous pouvez avoir Strawberry Red
&Tangerine
. À mon avis, ce ne sont pas des propriétés « naturelles » d'un produit. Ils sont uniquement utilisés pour que l'utilisateur se sente plus à l'aise lors de la visualisation du produit. Ainsi, vous pouvez également avoir une option de ce type comme Tangerine with figure
etc.
Encore une chose à propos des options. vous voudrez peut-être marquer les options censées être utilisées pour filtrer les produits. Par exemple color
est certainement un. Tandis que dimension
peut-être pas.
À propos des types d'options. Les vôtres vont bien si cela vous suffit. J'ai beaucoup plus de types comme Number
, String
, Single Choice
, Multiple Choices
. Je prévois également d'implémenter l'Unit
. Partie délicate de Unit
est-ce par exemple
1GB = 1024MB = 1024*1024B
Ainsi, lorsque vous obtenez un disque dur de 1 Go et 1 To, vous voudrez peut-être faire une conversion avant de filtrer les produits. C'est hors sujet, je reviens à votre question.
Notez que bien que les options des différentes catégories portent le même nom. Ce n'est probablement pas la même chose. Material
de Coat
et Furniture
sont 2 choses différentes. J'ai donc tendance à définir différentes options pour différentes catégories. Ainsi il peut y avoir color
pour les toys
, et color
pour la women fashion
. Cela n'entre pas en conflit avec l'héritage mentionné ci-dessus car à partir d'un certain niveau, les sous-catégories commencent à partager les mêmes options. Ceci est entièrement lié à la façon dont vous organisez votre structure de catégories. Et si vous souhaitez modifier la structure des catégories ou déplacer des produits à un moment donné, ce serait pénible. Soyez donc prudent lorsque vous définissez vos catégories.
C'est tout ce qui me vient à l'esprit. J'ai bien peur de ne pas être de langue maternelle anglaise, vous pourriez donc trouver une partie de ma réponse difficile à comprendre. N'hésitez pas à me le faire savoir.