Jag driver också en e-handelswebbplats. Här är mitt råd om hur jag implementerar funktionerna du nämnde. Hoppas det hjälper.
- Kategorier
Jag organiserar dem i en platt struktur, i ditt fall skulle det vara:
{_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/", ...}
Och produkten behöver nu bara finnas i bladkategorierna. I ditt fall:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
Produkten kan naturligtvis finnas i flera kategorier, så categoryIds
förblir en array.Här är den knepiga delen. När du listar Electronics
kategori kan du hitta alla dess underkategorier genom att:
db.categories.find({idPath: /^\/0\/1/})
idPath
index fungerar här så det kommer att gå snabbt. när du tar reda på alla underkategorier kan du enkelt hitta alla produkter i dem (bygg index på categoryIds
av Product
samling).
Eller alternativt kan du läsa in alla kategorier i minnet och bygga en hashtabell med nyckel->categoryId, value->[alla underkategorier]. Dina kategorier ändras vanligtvis inte ofta och du kommer inte att ha många kategorier. Så det kommer att gå bra.
- Taggar/Alternativ
Först och främst tror jag att det är något fel med din kategori. Women fashion
är något generiskt, bör du lägga din produkt i något mer specifikt, och alternativen bör finnas där också. Till exempel kan det finnas en kategori coat
som har size
&color
, annat än women fashion
. Även om det fortfarande kan finnas color
alternativ på women fashion
eftersom det är en gemensam egenskap för alla underkategorier.
Om du tänker efter, varför är alla underkategorier organiserade i en överordnad kategori? eftersom de har något gemensamt. Den gemensamma delen bör vara de vanliga alternativen för överordnad kategori. det vill säga att det ska finnas ett arv mellan alla överordnade kategorier och underkategorier. Till exempel:
Sedan coat
skulle äntligen ha 2 alternativ color
&size
. sun glasses
:color
&shape
. När du tittar på women fashion
, det finns bara ett alternativ color
. Det filtrerar även underkategorierna eftersom de ärver från women fashion
.
När det gäller färgvärdena är min idé att bara använda standardfärgerna Strawberry Red
är faktiskt red
, Tangerine
är faktiskt orange
. Du vill egentligen inte att de ska visas när du filtrerar produkterna. Annars skulle det finnas för många alternativ, definitivt inte bra för användarupplevelsen.
Men förutom color
alternativ från kategorin, min webbplats har också något som kallas customizable options
. Dessa alternativ är endast definierade på produkterna. De visas aldrig när du tittar på kategori. Här kan du ha Strawberry Red
&Tangerine
. Enligt min åsikt är dessa inte "naturliga" egenskaper hos en produkt. De används endast för att få användaren att känna sig mer bekväm när han tittar på produkten. Således kan du också ha alternativ av detta slag som Tangerine with figure
etc.
En sak till om alternativ. du kanske vill markera vilka alternativ som är tänkta att användas för att filtrera produkter. Till exempel color
är definitivt en. Medan dimension
kanske inte.
Om typer av alternativ. Din är bra om den räcker för dig. Jag har många fler typer som Number
, String
, Single Choice
, Multiple Choices
. Jag planerar också att implementera Unit
. Knepig del av Unit
är det till exempel
1GB = 1024MB = 1024*1024B
Så när du får en hårddisk på 1GB och 1TB, kanske du vill göra en konvertering innan du filtrerar produkter. Detta är utanför ämnet. Jag återkommer till din fråga.
Observera att även om alternativen för olika kategorier har samma namn. De är troligen inte samma sak. Material
av Coat
och Furniture
är 2 olika saker. Så jag tenderar att definiera olika alternativ för olika kategorier. Det kan alltså finnas color
för toys
och color
för women fashion
. Detta kommer inte i konflikt med arvet som nämns ovan eftersom från någon nivå börjar underkategorierna dela samma alternativ. Detta är helt relaterat till hur du organiserar din kategoristruktur. Och om du vill ändra kategoristruktur eller flytta produkter någon gång, skulle det vara smärtsamt. Så var försiktig när du definierar dina kategorier.
Det är allt som kommer upp i mitt sinne. Jag är rädd att jag inte är engelska som modersmål, så du kan tycka att en del av mitt svar är svårt att förstå. Meddela mig gärna.